[Haskell-cafe] OverloadedLists pattern-matching
Oliver Charles
ollie at ocharles.org.uk
Sun Apr 13 12:48:26 UTC 2014
On Sun, Apr 13, 2014 at 12:24 PM, Roman Cheplyaka <roma at ro-che.info> wrote:
> * Konstantine Rybnikov <k-bx at k-bx.com> [2014-04-13 12:21:44+0200]
>> Just FYI, this still gives a warning:
>> ...
>> case m of
>> [] -> putStrLn "empty"
>> (M.toList -> (x:_)) -> putStrLn $ "ok, some random elem is: " ++
show x
>
> Does that surprise you? The compiler doesn't have any special knowledge
about
> the M.toList function to infer that these two cases are exhaustive.
Roman is right, and I think it's clearer if you consider this without view
patterns:
case m of
[] -> ...
m' -> case M.toList m' of
(x : _) -> ...
Looking at this, it's clear that the patterns are not exhaustive - you
didn't match the scenario that M.toList m' produced an empty list.
*You* know that M.toList (M.fromList []) == [], but GHC doesn't - and I
think this is where the problem lies. With that information you might be
able to have exhaustive pattern matches there.
- ocharles
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140413/265d0382/attachment.html>
More information about the Haskell-Cafe
mailing list