[GHC] #14995: QuantifiedConstraints: Incorrect pretty printing
GHC
ghc-devs at haskell.org
Mon Apr 2 22:52:17 UTC 2018
#14995: QuantifiedConstraints: Incorrect pretty printing
-------------------------------------+-------------------------------------
Reporter: Iceland_jack | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: GHCi | Version: 8.2.2
Resolution: | Keywords:
| QuantifiedConstraints, wipT2893
Operating System: Unknown/Multiple | Architecture:
Type of failure: Poor/confusing | Unknown/Multiple
error message | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
This is like #14897. It'l be fine if you say `:info k`. But with `:t k`
you are asking GHC to infer the type of the expression `k`. So it
instantiates `k` to get the constraint
{{{
[W] ((C a1 => B a1 b1)) -- A quantified constraint
}}}
As usual `a1` and `b1` are unification variables.
To solve a quantified constraint we create an implication constraint
{{{
forall {}. C a1 => [W] B a1 b1
}}}
Now we are stuck, so we try to generalise. GHC tries to find a simple
constraint to generalise over, and `B a1 b1` does the job.
GHC ''never'' infers a quantified constraint. So `:t` will never display
a quantified constraint.
I don't know whether others trip over this `:type` vs `:info` distinction,
but you certainly do! Maybe `:type` should work only on identifiers, and
be identical to `:info`. We could have something else for arbitrary
expressions. Or maybe `:type` should behave non-uniformly for
identifiers.
Opinions welcome. But as it stands it's by-design.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14995#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list