Я знаю, что такое монады и как их использовать. То, что я не понимаю, , что делает, допустим, 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, это будет монада по умолчанию? Почему бы и нет?