On 20/01/2012 03:23, Edward Z. Yang wrote: > Oh, I'm sorry! On a closer reading of your message, you're asking not > only asking why 'fail' was added to Monad, but why unfailable patterns > were removed. > > Well, from the message linked: > > In Haskell 1.4 g would not be in MonadZero because (a,b) is unfailable > (it can't fail to match). But the Haskell 1.4 story is unattractive > becuase > a) we have to introduce the (new) concept of unfailable > b) if you add an extra constructor to a single-constructor type > then pattern matches on the original constructor suddenly > become > failable > > (b) is a real killer: suppose that you want to add a new constructor and > fix all of the places where you assumed there was only one constructor. > The compiler needs to emit warnings in this case, and not silently transform > these into failable patterns handled by MonadZero...
It's pretty ugly, but what about using a different 'do' to select the MonadZero behaviour? "failable-do Foo x <- bar" translates to mzero, whereas "do Foo x <- bar" translates to an error. That way programmer intent is captured locally. "failable-do" is a straw man name :-) Ganesh _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe