PatternSynonyms Non-exhaustive with UnboxedSums
The following implementation of Maybe
using UnboxedSums results in Non-exhaustive patterns in case
:
(Failure.hs
file)
{-# LANGUAGE UnboxedSums #-}
{-# LANGUAGE PatternSynonyms #-}
type Maybe' t = (# t | () #)
pattern Just' :: a -> Maybe' a
pattern Just' x = (# x | #)
pattern Nothing' :: Maybe' a
pattern Nothing' = (# | () #)
foo x = case x of
Nothing' -> putStrLn "nothing"
Just' _ -> putStrLn "just"
main = do
putStrLn "Nothing'"
foo Nothing'
putStrLn "Just'"
foo (Just' "hello")
When executed, it prints:
Nothing'
nothing
Just'
Failure: Failure.hs:10:20-29: Non-exhaustive patterns in case
Compiled with ghc Failure.hs
.
Please note that by removing the pattern
s, and writting foo
as following works as expected:
foo x = case x of
(# | () #) -> putStrLn "nothing"
(# _ | #) -> putStrLn "just"
Trac metadata
Trac field | Value |
---|---|
Version | 8.2.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |