[GHC] #13752: Odd pattern synonym type errors
GHC
ghc-devs at haskell.org
Thu May 25 06:23:19 UTC 2017
#13752: Odd pattern synonym type errors
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.4.1
Component: Compiler | Version: 8.2.1-rc2
(Type checker) |
Keywords: | Operating System: Unknown/Multiple
PatternSynonyms |
Architecture: | Type of failure: GHC rejects
Unknown/Multiple | valid program
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Suppose we have
{{{#!hs
newtype Arrange = Arrange {getArrange :: [Int] -> [Int]}
}}}
If I write
{{{#!hs
pattern Heh :: (c ~ ((~) Int)) => (forall a. c a => [a] -> [a]) -> Arrange
pattern Heh f <- Arrange f
}}}
I get
{{{
• Couldn't match type ‘[Int] -> [Int]’
with ‘forall a. Int ~ a => [a] -> [a]’
Expected type: forall a. c a => [a] -> [a]
Actual type: [Int] -> [Int]
• In the declaration for pattern synonym ‘Heh’
}}}
It surprises me that these don't match. I can hack around that a bit:
{{{#!hs
newtype Help = Help {getHelp :: forall a. Int ~ a => [a] -> [a]}
pattern Heh :: (c ~ ((~) Int)) => (forall a. c a => [a] -> [a]) -> Arrange
pattern Heh f <- ((\x -> Help (getArrange x)) -> Help f)
}}}
Now this compiles, and I can use it in a variety of ways, but not quite
all. If I write
{{{#!hs
pattern Heh' :: ([Int] -> [Int]) -> Arrange
pattern Heh' f <- Heh f
}}}
I get
{{{
Haha.hs:78:23: error:
• Couldn't match expected type ‘[Int] -> [Int]’
with actual type ‘forall a. Int ~ a => [a] -> [a]’
• In the declaration for pattern synonym ‘Heh'’
|
78 | pattern Heh' f <- Heh f
| ^
}}}
This strikes me as perhaps even more surprising. I can hack around that
too, of course, but yuck!
{{{#!hs
pattern Heh' :: ([Int] -> [Int]) -> Arrange
pattern Heh' f <- ((\(Heh g) -> g @ Int) -> f)
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13752>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list