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] = ???
+    }
+}