Hey everyone,

I am sure that it is too late to do more than idly speculate about this, but 
could we split the some/many methods out from Alternative?  They simply don't 
make sense except in a subset of possible Alternatives --- in most cases they 
just result in an infinite loop.  That is to say, it is not just that they are 
extraneous functionality, but most of the time they are *impossible* 
functionality to even implement!  In a way, it is a lie to be including them in 
Alternative since people making use of the class might incorrectly (but quite 
reasonably!) assume that any type that is an instance of Alternative *has* a 
well-defined some and many method, when this is actually the exception rather 
than the rule.

It is only recently that I have been able to grok what some and many are even 
about (I think), and they seem to only make sense in cases where executing the 
Alternative action results in a portion of some input being consumed or not 
consumed.  "some v" means "consume at least one v and return the list of items 
consumed or fail", and "many v" means "consume zero or more v and return the 
list of items consumed or the empty list of none are consume".  It thus makes 
sense for there to be some subclass of Alternative called something like 
"Consumptive" that contains these methods.  The majority of "Alternative" 
instances would no longer have these methods, and again that would actually be 
an improvement since in such cases some/many were unworkable and did nothing 
but cause infinite loops anyway.

Normally it would be unthinkable to even consider such a change to the base 
libraries, but I suspect that there are not more than a couple of packages out 
there that make active use of the some/many instances of Alternative;  it is 
really only parser packages that need some/many, and users most likely use the 
versions included with the packages themselves rather than the Alternative 
version.  Could we verify that this is the case, and if so split them away?  I 
thought I heard a trick whereby people were able to grep all the source on 
Hackage, but I can't remember what it was.  :-)

Just a thought.  :-)

Thanks,
Greg
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to