Вариант это и функтор и монада? - PullRequest
0 голосов
/ 30 мая 2019

Scala's Option - это и монада, и функтор?

Насколько я понимаю, functor - это просто тип данных, который предоставляет следующий API:

Functor :

  • wrap(или apply), который берет примитив и оборачивает его внутри функтора

  • map, который берет функтор, разворачивает его, применяет некоторую функцию и повторно оборачивает его

Итак, Option - функтор.Потому что я могу применить Option к примитиву, дающему мне Option[T].Я также могу map на Option, чтобы узнать, что находится внутри функтора, и перепаковать внутри Option.

Чем отличается монада?Я думал, что монада также имеет функцию apply и функцию map.Из этой статьи Я так понимаю, что монада также имеет flatMap?Что определяется как просто map, но без переупаковки результата внутри монады?(Или это map без повторной упаковки результата внутри функтора?!)

Поскольку Option поставляет как map, так и flatMap, значит ли это, что Option является и функтором, и монадой

1 Ответ

4 голосов
/ 30 мая 2019

Краткий ответ: Да.

Более длинный ответ: Каждая монада является аппликативным функтором, а каждый аппликативный функтор - функтором.В объектно-ориентированных терминах: Monad <: Applicative <: Functor. </p>

...