[Haskell-cafe] Re: Newbie on instance of Monad

Mauricio briqueabraque at yahoo.com
Sun Nov 2 08:31:34 EST 2008

>> Hi,
>> After a lot of thinking, I can't get what I
>> am doing wrong in this code:
>> (...)
>> data ( RandomGen g ) => RandomMonad g a = RandomMonad (g -> a)
> RandomGen g is considered the constraint for the application of 
> RandomMonad constructor, but GHC does not conclude that every value of 
> (RandomMonad g a) fulfills this constraint. Actually, 'undefined' is 
> available for any 'g'.
> you need to make (RandomGen g) a constraint of the instance:
> instance RandomGen g => Monad (RandomMonad g) where

Nice. I wasn't so wrong as I though :)

I didn't understand why can't the compiler deduce
that g is always going to be of type RandomGen. Even
if I use 'undefined', it has to be a RandomGen undefined.

> Btw. RandomMonad looks like Control.Monad.Reader.

You are right, I'll try that instead so I learn a little
bit more. But I can't understand this syntax:

class (Monad m) => MonadReader r m | m -> r where

What is the '|' doing there? I'll post that in a new thread
since it's a different question.


More information about the Haskell-Cafe mailing list