[Haskell-cafe] Re: Haddock seems to generate wrong types in newtype deriving

Simon Marlow simonmarhaskell at gmail.com
Mon Apr 24 06:17:09 EDT 2006


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


More information about the Haskell-Cafe mailing list