<div dir="ltr">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:<br><br>x = fromList [("x", 1)] :: Map String Int<br>main = print $ let !Nothing = Data.Map.lookup "x" x in 10 <br><br>







<p class="gmail-p1"><span class="gmail-s1">x: x.hs:22:20-51: Irrefutable pattern failed for pattern Nothing</span></p>-harendra<br><br><br>On 24 February 2017 at 09:21, Brandon Allbery <<a href="mailto:allbery.b@gmail.com">allbery.b@gmail.com</a>> wrote:<br>><br>> 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. :)<br>><br>> (Also I'm sure someone overly clever could figure out some way to abuse it. :)<br>><br>> On Thu, Feb 23, 2017 at 10:41 PM, Harendra Kumar <<a href="mailto:harendra.kumar@gmail.com">harendra.kumar@gmail.com</a>> wrote:<br>>><br>>> On 24 February 2017 at 08:45, Brandon Allbery <<a href="mailto:allbery.b@gmail.com">allbery.b@gmail.com</a>> wrote:<br>>>><br>>>> 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).<br>>><br>>><br>>> Can you explain how that will be useful (without a binding)? Will the pattern match be ever actually tried when there is no binding?<br>>><br>>> -harendra<br>><br>><br>><br>><br>> --<br>> brandon s allbery kf8nh                               sine nomine associates<br>> <a href="mailto:allbery.b@gmail.com">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net">ballbery@sinenomine.net</a><br>> unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net">http://sinenomine.net</a></div>