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
является и функтором, и монадой