[Haskell-cafe] Strange quirk with {} syntax?

Brent Yorgey byorgey at gmail.com
Thu Nov 30 14:11:37 UTC 2023

Yes, you're the last to learn about it; we were all wondering when you
would figure it out. ;-)

It's definitely "folklore", I can't remember where I first learned about
it.  I agree with Tom that it's surprising (but nice) that it works even
with data types that were not declared using record syntax.  I also always
find it surprising that record update or matching binds more tightly than
function application, so that no parentheses are needed.  Sometimes I feel
like it would actually look nicer to write

f (A1 {}) = ...

but then hlint yells at me.  (Yes, I'm aware I can turn off individual
hlint warnings. =)


On Thu, Nov 30, 2023 at 7:47 AM Noon van der Silk <noonsilk at gmail.com>

> Sometimes I have a type like:
>     data A = A1 Int | A2 Int Int
> Then if I want to do pattern matching and ignore the parameters I do:
>     f (A1 _) = ..
>     f (A2 _ _) = ...
> But that's annoying; I need to remember how many parameters each one has!
> Yesterday I learned I can just do this:
>     f A1 {} = ...
>     f A2 {} = ...
> And GHC is happy.
> Is this expected? Am I the last to learn about this trick?
> --
> Noon van der Silk, ن
> http://silky.github.io/
> "My programming language is kindness."
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20231130/82edea03/attachment.html>

More information about the Haskell-Cafe mailing list