
31 Oct
2008
31 Oct
'08
4:49 p.m.
On Fri, 31 Oct 2008, Mauricio wrote:
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'.
instance Monad (RandomMonad g) where return = RandomMonad . const RandomMonad f1 >>= f2 = RandomMonad f3 where f3 a = f2f1 a (next a) RandomMonad f2f1 = f2 . f1
you need to make (RandomGen g) a constraint of the instance: instance RandomGen g => Monad (RandomMonad g) where Btw. RandomMonad looks like Control.Monad.Reader.