[Haskell-cafe] Non-Overlapping Patterns

PR Stanley prstanley at ntlworld.com
Mon May 5 10:58:53 EDT 2008

isZero :: Int -> Bool
isZero 0 = True
isZero n | n /= 0 = False

The order in which the above equations appear makes no difference to 
the application of isZero. Does the Haskell interpreter rewrite 
patterns into one single definition using some sort of switch or if 
construct? Why does an equation without a guard have to be placed 
after the more specific cases?To put it another way, why doesn't the 
interpreter identify the more specific cases and put them before the 
general ones.

More information about the Haskell-Cafe mailing list