[Haskell-cafe] Stacking monads - beginner design question

Johan Tibell johan.tibell at gmail.com
Wed Jan 30 04:01:59 EST 2008


> Are monad stacks with 3 and more monads common?
> How could an example implementation look like?

I found reading the xmonad code (http://code.haskell.org/xmonad/)
enlightening. The X monad definition can be found in
http://code.haskell.org/xmonad/XMonad/Core.hs

-- | The X monad, a StateT transformer over IO encapsulating the window
-- manager state
--
-- Dynamic components may be retrieved with 'get', static components
-- with 'ask'. With newtype deriving we get readers and state monads
-- instantiated on XConf and XState automatically.
--
newtype X a = X (ReaderT XConf (StateT XState IO) a)
    deriving (Functor, Monad, MonadIO, MonadState XState, MonadReader XConf)

-- Johan


More information about the Haskell-Cafe mailing list