MultiWayIf extension offer that cannot be done using
| guards and vice versa?
For instance, one can write same function as
f x | x == 0 = -1 | otherwise = x
f x = if | x == 0 -> -1 | otherwise -> x
I don't see any difference between these two examples beside syntactic sugar used. Are there situations where I should prefer one over another?
if is not supposed to be used instead of function guards. If you can use guards, you should do that. But the multiway
if can also be used in the middle of an expression, much like
f x = "The argument is " ++ if | x > 0 -> "positive" | x < 0 -> "negative" | otherwise -> "zero"
Personally I do find the clarity of this specific example rather questionable, but this is the difference.