On Dec 15, 2011, at 4:29 PM, Chris Wong wrote:

Okay, so how about the following as a user narrative for some and many?

...

I was in the middle of writing my own version of Applicative when I
stumbled on this intense debate. Here's what I wrote for the
documentation:

class (Applicative f, Monoid f) => Alternative f where
   -- | Keep repeating the action (consuming its values) until it
fails, and then return the values consumed.
   --
   -- [Warning]: This is only defined for actions that eventually fail
   -- after being performed repeatedly, such as parsing. For pure values such
   -- as 'Maybe', this will cause an infinite loop.
   some :: f a -> f [a]
   some v = ...

   -- | Similar to 'many', but if no values are consumed it returns
'empty' instead of @f []@.
   --
   -- [Warning]: This is only defined for actions that eventually fail
   -- after being performed repeatedly, such as parsing. For pure values such
   -- as 'Maybe', this will cause an infinite loop.
   many :: f a -> f [a]
   many v = ...

Warnings are repeated for emphasis :)

I think that merely putting up documentation along these lines would be a huge improvement, though it should also contain the formal definitions from the old documentation in it somewhere as well.

Cheers,
Greg