
#9701: GADTs not specialized properly -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.9 Resolution: | Keywords: Operating System: | Architecture: Unknown/Multiple Unknown/Multiple | Difficulty: Unknown Type of failure: Runtime | Blocked By: performance bug | Related Tickets: Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by simonpj): Implicit parameters. They are indeed treated specially. In particular, the example in comment:10 for implicit parameters would look like this: {{{ data SillyIP a where Silly :: ?plus::(a->a->a) => a -> Silly a -- Inferred type -- double :: (?plus :: Int -> Int -> Int) => Int -> Int double n = ?plus n (n::Int) oops :: Silly Int oops (Silly x) = double x }}} There are no top-level implicit parameters, so `double`'s inferred type is as shown, and it'll pick up `plus` from the `Silly` pattern match. Reverting to the main thread, I'm not sure where this discussion is going. The base assumption is if multiple type-class instances match (e.g. from two enclosing pattern matches, comment:2, or from an enclosing patten- match and the top level) then you are on terribly thin ice is you want to predict which one will be chosen. They are all supposed to have the same value, and if they don't then, well, the ice is thin. One could try to thicken up the ice here, but it's all tangled up with the scoping of instances, overlapping instances, incoherent instances etc... My take on this: brain cycles are more productively invested elsewhere. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9701#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler