[Haskell-cafe] pattern matches are overlapped

Brandon Allbery allbery.b at gmail.com
Thu Oct 23 18:27:26 UTC 2014

On Thu, Oct 23, 2014 at 2:23 PM, <briand at aracnet.com> wrote:

> keyboardAct a d p (SpecialKey KeyLeft) Down shiftDown = do
>   (x,y) <- get p
>   p $= (x-0.1, y)
> where,
>    shiftDown = Modifiers {shift=Down, ctrl=Up, alt=Up}

You can't use a definition like that directly in a pattern match; a name
starting with lowercase is a new binding, not the value of some existing
binding. You can instead use a guard or, sometimes, a pattern guard.

That is,

    keyboardAct a d p (SpecialKey KeyLeft) Down shiftDown =

is identical to

    keyboardAct a d p (SpecialKey KeyLeft) Down x =

aside from the name of the new local binding it introduces. It does *not*
use an existing binding for shiftDown or x, it always creates a new one.

brandon s allbery kf8nh                               sine nomine associates
allbery.b at gmail.com                                  ballbery at sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20141023/a766f21b/attachment.html>

More information about the Haskell-Cafe mailing list