On Sat, Jan 21, 2012 at 10:08 AM, Roman Cheplyaka <roma@ro-che.info> wrote:
* David Barbour <dmbarbour@gmail.com> [2012-01-21 10:01:00-0800]
> As noted, IO is not strict in the value x, only in the operation that
> generates x. However, should you desire strictness in a generic way, it
> would be trivial to model a transformer monad to provide it.
Again, that wouldn't be a monad transformer, strictly speaking, because
"monads" it produces violate the left identity law.
It meets the left identity law in the same sense as the Eval monad from Control.Strategies.
That is, so long as values at each step can be evaluated to WHNF, it remains true that `return x >>= f` = f x.
I did mess up the def of >>=. I think it should be:
(StrictT op) >>= f = StrictT (op >>= \ x -> x `seq` runStrictT (f x))
But I'm not interested enough to actually pull out an interpreter and test...
Regards,
Dave