type ID[A] = A implicit val idMonad: Monad[ID] = new Monad[ID] { def pure[A](a: A): ID[A] = a def flatMap[A, B](fa: ID[A])(f: A => ID[B]): ID[B] = f(fa) }