[Haskell-cafe] [Alternative] change some/many semantics

Gregory Crosswhite gcrosswhite at gmail.com
Thu Dec 15 04:58:48 CET 2011


Hey everyone,

This is even more out there than my previous posts, but the following just occurred to me:  is it absolutely necessary that some/many have produced the entire list of results before returning?  Couldn't we change their semantics so that the list of results is computed and/or extracted lazily?  For example, if this were the case, then we would have that (some (Just 1)) returns an infinite list rather than running in an infinite loop (even without defining a special case "some" implementation), which is exactly what my intuition would expect.

Of course, this is not a simple change at all because it would have to be done in such a way as to respect the ordering of actions --- that is, we can't have each action executed only when the corresponding element of the list demanded is forced, or else actions would undesirably interleave.  For example, in a parser when we use "many v" we expect everything matching v to be consumed by the time "many v" returns, but if instead "many v" only consumed as much of the input as we demanded from its result list then we might see a chunk of input matching v in another part of our parser despite having assumed we'd gotten rid of it, which would cause our parser to be broken.

Nonetheless, if there were some way that we could use magic fairy dust to have the results returned by some and many be lazily generated lists, then this might solve many of the problems that come up with them performing infinite loops in cases where it seems like they shouldn't.  :-)

Cheers,
Greg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20111215/2fe2a6b9/attachment.htm>


More information about the Haskell-Cafe mailing list