
2 Mar
2010
2 Mar
'10
3:17 p.m.
Hi, when checking the first monad law (left unit) for the IO-monad (and also for the ST monad): return a >>= f ≡ f a I figured out that there is the "distinguishing" context (seq [] True) which falsifies the law for a and f defined below
let a = True let f = \x -> (undefined::IO Bool) seq (return a >>= f) True True seq (f a) True *** Exception: Prelude.undefined
Is there a side-condition of the law I missed? Regards, David