Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package extension.monad
- trait Monad[A, M[_]] {
- // >>= :: Monad m => m a -> (a -> m b) -> m b
- def flatMap[B](input: A => M[B]): M[B] // AKA "bind"
- }
- trait Functor[A, F[_]] {
- // fmap :: Functor f => (a -> b) -> f a -> f b
- def map[B](input: A => B): F[B] // AKA "fmap"
- }
- object MOption {
- implicit class MonadicOption[A](left: Option[A]) extends Monad[A, Option] with Functor[A, Option] {
- def flatMap[B](right: A => Option[B]): Option[B] = left match {
- case Some(x) => right(x)
- case None => None
- }
- def map[B](right: A => B): Option[B] = left match {
- case Some(x) => Some(right(x))
- case None => None
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement