<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Sep 30, 2015 at 6:38 PM Sven Panne <<a href="mailto:svenpanne@gmail.com">svenpanne@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">IMHO using pattern synonyms vs. plain old Haskell values is to a large part just bikeshedding, at least in the trivial case at hand where we talk about simple integral values. It basically boils down to the question: Is<br></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>   foo x = case x of</div><div>     GL_BAR -> expr1</div><div>     GL_BAZ -> expr2</div><div>     _ -> expr3</div><div><br></div><div>really so much better than</div><div><br></div><div>   foo x</div><div>     | x == GL_BAR = expr1</div><div><div>     | x == GL_BAZ = expr2</div></div><div>     | otherwise = expr3</div></div></div></div></blockquote><div><br></div><div>Yes, because the first approach is an expression that you can use anywhere. Sure, there's little difference when you do it at the "top" of a function definition, as you're doing. However, it's a lot more significant if you want to do something like:</div><div><br></div><div>foo x = doSomething (case x of ...)</div><div><br></div><div>Without pattern synonyms, you either have</div><div><br></div><div>foo x = doSomething x'</div><div>  where x' | x == ... = ...</div><div><br></div><div>or</div><div><br></div><div>{-# LANGUAGE MultiWayIf #-}</div><div><br></div><div>foo x = doSomething (if | x == ... -> ...)</div></div></div>