Brian Hulley wrote:
Hi -
I have the following code:

data MState = MState -- details omitted
type MonadStateMState = MonadState MState -- necessary for Haddock
newtype ManagerM a =
                ManagerM (StateT MState IO a)
                deriving (Monad, MonadIO, MonadStateMState)

which means that ManagerM is an instance of Monad, MonadIO, and MonadState MState.
However, the Haddock docs look like:

data ManagerM a
Instances
??? a => Monad (ManagerM a)
??? a => MonadIO (ManagerM a)
??? a => MonadStateMState (ManagerM a)

which doesn't seem at all right to me. I'd have thought it should say:

data ManagerM a
Instances
    Monad ManagerM
    MonadIO ManagerM
    MonadStateMState ManagerM

Is this just a bug in Haddock or am I misunderstanding something about Haskell?

It's a bug / missing feature in Haddock. Haddock is basically pretty dumb when it comes to understanding Haskell code; it knows about the syntax and the module system, and that's about all. It makes a half-hearted attempt to figure out what instances you get from deriving clauses, but it's not complete, and you've encountered a case it doesn't handle.

One day Haddock will be built on top of the GHC API, and all this will be fixed...

Cheers,
        Simon
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to