
#15674: GADT's displayed type is misleading -------------------------------------+------------------------------------- Reporter: AntC | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.6.1-beta1 Resolution: | Keywords: Operating System: Windows | Architecture: x86_64 Type of failure: Poor/confusing | (amd64) error message | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by AntC): Replying to [comment:4 monoidal]: Thank you for the tip with defining patterns. It's the only way to reveal the differences here: {{{#!hs data family DG3 a data instance DG3 a where MkDG3 :: Int -> DG3 [Int] data family DG4 a data instance DG4 [a] where MkDG4 :: Int -> DG4 [Int]
:i PDG3 PDG4
pattern PDG3 :: () => (a ~ [Int]) => Int -> DG3 a pattern PDG4 :: () => (a ~ Int) => Int -> DG4 [a] }}}
Should we show this and how? I don't know.
Now we have variable `a` showing. But according to Richard's message, it shouldn't be because it's not `forall`'d, neither explicitly nor implicitly (sigh). And indeed `:i` for the data constructors doesn't show `(a ~ ...)` even with full verbosity. My understanding of pattern synonyms is that they're built on top of data constructors. Then it seems back-to-front to use pattern synonyms to diagnose constructors. This ticket arose from a quest to understand `data` and `data instance`s from the ground up. I can't find any firm ground to start from, only quicksand. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15674#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler