Зачем использовать functor?

Спасибо за внимание! Подскажите, в чем преимущество функтора, ведь он просто применят функцию на значении хранящемся в объекте? Мы могли делать это и раньше, без объекта (новичок в ФП). Не ругайте, если вопрос показался тупым :)
  • Вопрос задан
  • 337 просмотров
Пригласить эксперта
Ответы на вопрос 1
Функтор, в контексте функионального программирования — это интерфейс (или тайпкласс), который может быть реализован для разных типов. Чтобы тип мог имплементировать функтор, он должен иметь кайнд * -> * (то есть это должен быть дженерик с одним параметром) и для него должна быть реализована функция map:

map :: Functor f => (a -> b) -> (f a -> f b)

Имя и сигнатура могут отличаться в зависимости от реализации, например в Haskell эта функция называется fmap, а в Fantasy Land сигнатура выглядит так:

map :: Functor f => f a ~> (a -> b) -> f b

Также для функции/метода map должны выполняться определённые законы, не буду их копировать сюда, просто оставлю ссылку: https://github.com/fantasyland/fantasy-land#functor

Несколько примеров функторов:
  • Arraymap применяет функцию к каждому элементу массива.
  • Futuremap применяет функцию к значению когда оно зарезолвится.
  • Maybemap применяет функцию к значению, если оно существует, иначе возвращает Nothing.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы