diff --git a/src/main/scala/monads/MonadFunctor.scala b/src/main/scala/monads/MonadFunctor.scala new file mode 100644 index 0000000000000000000000000000000000000000..3c9292549b8f3ac6889dfc79555195467e361b99 --- /dev/null +++ b/src/main/scala/monads/MonadFunctor.scala @@ -0,0 +1,14 @@ +trait Monad[F[_]] { + def unit[A](a: A): F[A] + def flatMap[A, B](fa: F[A])(f: A => F[B]): F[B] +} + +trait Functor[F[_]] { + def map[A, B](a: F[A])(f: A => B): F[B] +} + +object Functor { + def functorFromMonad[F[_]](m: Monad[F]): Functor[F] = new Functor[F] { + // your code for map here + } +} diff --git a/src/main/scala/monads/MonadId.scala b/src/main/scala/monads/MonadId.scala new file mode 100644 index 0000000000000000000000000000000000000000..5254529063e3ef52dd8b1787789b5a403a240b14 --- /dev/null +++ b/src/main/scala/monads/MonadId.scala @@ -0,0 +1,8 @@ +final case class Id[A](value: A) + +object Id { + implicit val idMonad = new Monad[Id] { + def unit[A](a: A): Id[A] = ??? + def flatMap[A, B](fa: Id[A])(f: A => Id[B]): Id[B] = ??? + } +}