Я знаю, что такое монады и как их использовать. То, что я не понимаю, , что делает, допустим, Option
монаду?
В Haskell монада Maybe
является монадой, поскольку она создается из класса Monad
(который имеет как минимум 2 необходимые функции return
и bind
, что делает класс Monad
, действительно, монадой).
Но в Scala у нас есть это:
sealed abstract class Option[+A] extends Product with Serializable { ... }
trait Product extends Any with Equals { ... }
Ничего не связано с монадой.
Если я создаю свой собственный класс в Scala, это будет монада по умолчанию? Почему бы и нет?