Haskell MultiWayIf extension: When is it considered useful syntactic sugar? The new MultiWayIf extension (available with GHC 7.6) allows guard syntax in an if:

{-# LANGUAGE MultiWayIf #-}
fn :: Int -&gt; String
fn x y = if | x == 1    -&gt; "a"
            | y &lt;  2    -&gt; "b"
            | otherwise -&gt; "c"


But I don't find it better than the old way:

fn :: Int -&gt; String
fn x y | x == 1    = "a"
       | y &lt;  2    = "b"
       | otherwise = "c"


Has it sense in other cases?
Unsurprisingly, it's mainly useful when the if is not the top-level expression. Say:

forM_ [1..100] $ \i -&gt;
  putStrLn $ if | i `mod` 15 == 0  -&gt; "FizzBuzz"
                | i `mod` 3 == 0   -&gt; "Fizz"
                | i `mod` 5 == 0   -&gt; "Buzz"
                | otherwise        -&gt; show i


I happen across similar cases quite often - up to this point this required either deep if trees or mis-using case in some way.