What is the purpose of * in the ReaderT Monad Transformer?

Viewed 228

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.

1 Answers
Related