On 2012-01-19 23:52, Michael Snoyman wrote:
maybe I should file a feature request: provide an extra warning
flag (turned on by -Wall) that will warn when you match on a failable
pattern.

I fully agree if it's IO, so that a failed pattern match leads to an exception. The "nice" implementations of fail in the List and Maybe monads are a different story.

Ideally one would want to be able to turn on a warning whenever IO is used in a way which could generate a pattern match exception. This would call for a type distinction, as you said, "reinstate the MonadZero constraint".

Here's an idea that might address SPJ's "killer".
      b) if you add an extra constructor to a single-constructor
         type then pattern matches on the original constructor
         suddenly become failable

Another binding operator might be introduced so that the code would show the intention either to have a failable or non-failable pattern match.
     do (x,y) <- pair       failable, requires MonadZero
     do (x,y) <=- pair      requires non-failable pattern
                            supports Monads that should not fail

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

Reply via email to