[Haskell-cafe] what exactly does "deriving (Functor, Monad, MonadIO)" do?

Donald Bruce Stewart dons at cse.unsw.edu.au
Tue May 1 05:47:45 EDT 2007


tphyahoo:
> I was trying to follow the reasoning in Don's article on using haskell
> for shell scripting
> 
>  http://cgi.cse.unsw.edu.au/~dons/blog/2007/03/10
> 
> In the source listing at the end we is
> 
>      newtype Shell a = Shell { runShell :: ErrorT String IO a }
>        deriving (Functor, Monad, MonadIO)
> 
> and I don't understand it what "deriving" is doing here, nor have I
> been able to find documentation on it.

That's 'cunning newtype deriving, my new favourite ghc language
extension.

    http://www.haskell.org/ghc/docs/latest/html/users_guide/type-extensions.html#newtype-deriving

We also use it in xmonad,

    newtype X a = X (ReaderT XConf (StateT XState IO) a)
        deriving (Functor, Monad, MonadIO, MonadState XState, MonadReader XConf)

:-)

-- Don


More information about the Haskell-Cafe mailing list