[Haskell-cafe] Monads, do and strictness

David Barbour dmbarbour at gmail.com
Sat Jan 21 19:45:27 CET 2012

On Sat, Jan 21, 2012 at 10:08 AM, Roman Cheplyaka <roma at ro-che.info> wrote:

> * David Barbour <dmbarbour at 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


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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120121/31708ce3/attachment.htm>

More information about the Haskell-Cafe mailing list