
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. Thanks, MaurĂcio