[Haskell-cafe] What does "1 = 2" mean in Haskell?

Harendra Kumar harendra.kumar at gmail.com
Fri Feb 24 05:04:06 UTC 2017


Yes, if you use a bang pattern in a let clause it can act as an assert in a
strict context (e.g. in IO Monad). But, it can't even be caught as an
exception (or can it?). For example, this fails:

x = fromList [("x", 1)] :: Map String Int
main = print $ let !Nothing = Data.Map.lookup "x" x in 10

x: x.hs:22:20-51: Irrefutable pattern failed for pattern Nothing
-harendra


On 24 February 2017 at 09:21, Brandon Allbery <allbery.b at gmail.com> wrote:
>
> Without a binding it is useless at top level, but if you strictify the
pattern it can be useful in `let` (possibly as a sanity check where you
want the program to abort if it fails). I don't recall offhand if it
desugars usefully in list comprehensions, but if so it would work as a
filter. There may also be other specialized use cases; general syntax tends
to get reused a lot in Haskell, so making this case a syntax error could
make it difficult to support actually useful cases. :)
>
> (Also I'm sure someone overly clever could figure out some way to abuse
it. :)
>
> On Thu, Feb 23, 2017 at 10:41 PM, Harendra Kumar <harendra.kumar at gmail.com>
wrote:
>>
>> On 24 February 2017 at 08:45, Brandon Allbery <allbery.b at gmail.com>
wrote:
>>>
>>> Literally the only use I've seen for this was a CCC puzzle. However, it
is the trivial case of something that is more useful: pattern matching the
result of an expression (say, a Data.Map.lookup when you know the key
exists).
>>
>>
>> Can you explain how that will be useful (without a binding)? Will the
pattern match be ever actually tried when there is no binding?
>>
>> -harendra
>
>
>
>
> --
> 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://mail.haskell.org/pipermail/haskell-cafe/attachments/20170224/ae97e78f/attachment.html>


More information about the Haskell-Cafe mailing list