Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trait Functor[F[_]]
- def [A,B](a : F[A]) map(func : A => B) : F[B]
- trait Monad[F[_] : Functor]
- def [A](a : A) identity : F[A]
- def [A](mma : F[F[A]]) flatten : F[A]
- def [A,B](ma : F[A]) flatMap(func : A => F[B]) : F[B] =
- ma map func flatten
- enum Maybe[T]
- case Some(t : T)
- case Empty()
- object Maybe
- given Functor[Maybe]
- def [A,B](ma : Maybe[A]) map(func : A => B) : Maybe[B] =
- ma match
- case Maybe.Empty() => Maybe.Empty()
- case Maybe.Some(a) => Maybe.Some(func(a))
- given Monad[Maybe]
- def [A](a : A) identity : Maybe[A] = Maybe.Some(a)
- def [A] (mma : Maybe[Maybe[A]]) flatten : Maybe[A] =
- mma match
- case Maybe.Empty() => Maybe.Empty()
- case Maybe.Some(ma) => ma
- @main def m = println(Maybe.Some("a").flatMap(_ => Maybe.Some("b")))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement