
On Aug 14, 2009, at 20:55 , Michael P Mossey wrote:
In Martin Grabmuller's tutorial "Monad Transformers Step by Step", found here
http://user.cs.tu-berlin.de/~magr/pub/Transformers.pdf
he gives an example of composing ErrorT, StateT, ReaderT, and WriterT. Early in the paper, where he composes just ErrorT and ReaderT
type Eval3 a = ReaderT Env (ErrorT String Identity) a
he uses 'ask' and 'throwError' in some example code. I notice that he doesn't have to lift throwError into the ErrorT monad. Why is this? Do I misunderstand something about monad transformers? Is it a convenience definition of throwError?
Look for definitions of the form
instance MonadReader Eval3 where ... instance MonadError Eval3 where ...
These effectively "import" definitions of ask, throwError, etc. with implicit lifting. -- brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery@kf8nh.com system administrator [openafs,heimdal,too many hats] allbery@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH