Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

The "lift . lift . lift" expression in multiply stacked monad transformers can often be completely eliminated by using the classes MonadReader, MonadState, MonadIO etc etc, with

    putStrLn :: MonadIO m => String -> m ()
    ask :: MonadReader r m => m r
    modify :: MonadState s m => (s -> s) -> m ()
Now you can define

    instance (MonadTrans t, MonadState s m) => MonadState s (t m) where ...
so that any monad transformer applied to a state monad is automatically another state monad. Win!


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: