I am looking at the documentation for the Reader monad and ReaderT monad transformer.
The relevant definitions are:
newtype ReaderT k r m a :: forall k. * -> (k -> *) -> k -> *
type Reader r = ReaderT * r Identity
I don't understand what the * are doing in the definitions. In particular I am attempting to derive a new monad from ReaderT with IO as the base monad and a class constraint on the r value.
I am not sure why there is a fourth input to ReaderT (k) and what Reader is doing with that value when it puts a * in that position.