[GHC] #14380: Compile error for PatternSynonyms together with OverloadedLists
GHC
ghc-devs at haskell.org
Sun Oct 22 00:25:42 UTC 2017
#14380: Compile error for PatternSynonyms together with OverloadedLists
-------------------------------------+-------------------------------------
Reporter: lehins | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.3
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
{{{#!hs
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE PatternSynonyms #-}
data Foo = Foo [Int]
pattern Bar :: Foo
pattern Bar = Foo []
}}}
This code results in a cryptic compilation error:
{{{
$ ghc main.hs
[1 of 1] Compiling Main ( main.hs, main.o )
main.hs:7:19: error:
• Couldn't match expected type ‘[a0] -> [Int]’
with actual type ‘[GHC.Exts.Item Int]’
• This rebindable syntax expects a function with two arguments,
but its type ‘Int -> [GHC.Exts.Item Int]’ has only one
In the first argument of ‘Foo’, namely ‘[]’
In the expression: Foo []
|
7 | pattern Bar = Foo []
| ^^
}}}
As soon as `OverloadedLists` is removed, this error goes away. In itself
the problem isn't too critical, but very unexpected.
I got above error with GHC 8.0 and 8.2, so decided to check it with
current version as well:
{{{
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.3.20171020
}}}
Looking a bit more into `PatternSynonyms` extension I was able to work
around this by declaring an explicit bidirectional pattern, which,
surprisingly, solved the problem:
{{{#!hs
pattern Bar :: Foo
pattern Bar <- Foo [] where
Bar = Foo []
}}}
If fixing this issue is too much trouble than it is worth, than at least a
mention about it in documentation will be helpful.
Out of curiosity I also tried it with `String`, which did not trigger this
error and compiled just fine:
{{{#!hs
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
data Foo = Foo [Char]
pattern Bar :: Foo
pattern Bar = Foo ""
}}}
PS. Even if this issue is closed, searching the internet for the error
message will now at least return some info. :)
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14380>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list