
By the way, I didn't exactly reply your question :
[...] Basically, i don't understand what does "ErrorT ::" means - it should name the function - but it starts with capital letter?
It's a type signature, it describes the type of ErrorT: Prelude> import Control.Monad.Error Prelude Control.Monad.Error> :t ErrorT ErrorT :: m (Either e a) -> ErrorT e m a So that says, ErrorT is a value constructor that takes a value of type m (Either e a) and makes a value of type ErrorT e m a. Notice that the type constructor and the value constructor have both the same name ErrorT, I used to get confused by this when I began learning. If you type under ghci Prelude Control.Monad.Error> :k ErrorT ErrorT :: * -> (* -> *) -> * -> * That tells you that ErrorT is a type constructor that takes a type, a unary type constructor, and a type; and with all this defines a new type (ErrorT e m a). David.