[GHC] #16252: QuantifiedConstraints: lack of inference really is a problem
GHC
ghc-devs at haskell.org
Tue Jan 29 01:53:24 UTC 2019
#16252: QuantifiedConstraints: lack of inference really is a problem
-------------------------------------+-------------------------------------
Reporter: lightandlight | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.6.2
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:
-------------------------------------+-------------------------------------
I've been debugging an issue that boils down to: quantified constraints
are completely ignored during type inference.
For example, in this program:
{{{#!hs
{-# language QuantifiedConstraints #-}
module QC where
data A f = A (f Int)
eqA :: forall f. (forall x. Eq x => Eq (f x)) => A f -> A f -> Bool
eqA (A a) (A b) = a == b
eqA' :: (forall x. Eq x => Eq (f x)) => A f -> A f -> Bool
eqA' = let g = eqA in g
}}}
`eqA'` won't compile because `g` gets generalised to `forall f. A f -> A f
-> Bool`.
I know this has been discussed (and dismissed) in tickets such as #2256
and #14942, but I really think it's a problem.
In my example, I can get the code compiling by turning on
ScopedTypeVariables and giving `g` an annotation. But I don't always have
this liberty. For example, in the `deriving-compat` library there's
Template Haskell that generates definitions containing `let`s, and when a
quantified constraint is present these splices don't type check for the
same reason `eqA'` doesn't. The solution here involves a pull request to
`deriving-compat` that uses ScopedTypeVariables to annotate the
problematic `let`s.
But I really think that none of this should be necessary. The reference
implementation of QCs (https://github.com/gkaracha/quantcs-impl) doesn't
seem to have this problem. Is there anything I'm missing?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16252>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list