[GHC] #16070: Better inferred signatures
GHC
ghc-devs at haskell.org
Sat Dec 22 02:26:09 UTC 2018
#16070: Better inferred signatures
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.6.3
Resolution: | Keywords: TypeFamilies
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by AntC):
Replying to [ticket:16070 simonpj]:
> ... quite a bit shorter.
To be clear what's intended here: the "shorter" could be achieved by
something akin to Common Subexpression Elimination. That is:
* Common type (sub-)expressions appearing in constaints.
* Replace by a bare unification tyvar.
* Add a `~` constraint between the tyvar and the type expression.
But wait, there's more:
> After all, it does some similar abbreviation with type classes. Where
we could
> infer `(Ord a, Eq a)` we collapse out the `Eq a` and just infer the
context `(Ord a)`.
The `~` constraint generated for the common type expression `FieldType` is
exactly the superclass constraint for `HasField`, just as `Eq a` is a
superclass constraint for `(Ord a)`.
Note also a later comment on that github discussion that the `FieldType`
constraint holding implies there's a `HasField` instance -- because
`FieldType` is an Associated Type. Using that implication seems harder:
Assoc Types are trreated as sugar for top-level type families/not
necessarily grounded in instances, which already gives trouble.
>
> There is nothing record-specific about this ticket. It's just about
using inferred equality constraints to simplify the inferred signature.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16070#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list