The same way Option encodes optionality, the Id represents nothing special. It wraps a value but does nothing with it. Why would we need something that's not a thing? The Id is kind of a meta-lifting, which can represent anything as an effect without changing it. How can this be done? Well, first of all, we have to say to the compiler that an Id[A] is the same thing as an A. This is easily done with a type alias:
type Id[A] = A
This type definition will dictate the details of the monad's implementation:
implicit val idMonad = new Monad[Id] {
override def unit[A](a: => A): Id[A] = a
override def flatMap[A, B](a: Id[A])(f: A => Id[B]): Id[B] = f(a)
}
Obviously, unit(a) is just a, and by having the type alias we just defined, we're making the compiler believe that it is not of type A, but an Id[A]. Similarly, with the flatMap, we can't do anything...