[Haskell-cafe] Re: Optimizing 'sequence'

Don Stewart dons at galois.com
Wed Jul 23 13:48:23 EDT 2008


gracjanpolak:
> Chaddaï Fouché <chaddai.fouche <at> gmail.com> writes:
> > 2008/7/22 Luke Palmer <lrpalmer <at> gmail.com>:
> > > A little formal reasoning reveals that sequence1 = sequence2 exactly
> > > when (>>=) is strict in its left argument.  There are four common
> > > monads which are _not_: Identity, Reader, Writer, State (and RWS by
> > > extension).
> > 
> > Still if that makes that much of a difference, maybe we could envision
> > putting a sequence' in the library ?
> > 
> 
> Yes, in my experiments this is to be or not to be. Stack space is limited. 
> Also processing time goes down by 800%, so it is a big deal sometimes.
> 
> Incomplete list of functions affected:
> 
> sequence
> mapM
> foldM
> Text.ParserCombinators.Parsec.Combinator(many1,sepBy,endBy,manyTill)
> Text.ParserCombinators.ReadP(many,many1,count,sepBy,endBy,manyTill)
> ...
> 
> As far as I know sequence could be specialized to IO monad and use my
> transformation.
> 
> How do I reason if >>= for parsers is lazy in its first argument?

How about adding

    Control.Monad.Strict

for the strict package?

    http://hackage.haskell.org/cgi-bin/hackage-scripts/package/strict


More information about the Haskell-Cafe mailing list