[GHC] #11534: Allow class associated types to reference functional dependencies
GHC
ghc-devs at haskell.org
Sat Apr 15 02:53:56 UTC 2017
#11534: Allow class associated types to reference functional dependencies
-------------------------------------+-------------------------------------
Reporter: ekmett | Owner: (none)
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler (Type | Version: 7.10.3
checker) | Keywords: TypeFamilies,
Resolution: | FunctionalDependencies
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: Other | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by AntC):
Replying to Simon:
> This would make it possible for given constraints involving fundeps to
work properly, which they don't at present (as Iavor points out).
Iavor is mostly complaining that currently you can declare instances that
break FunDeps Consistency. (And because GHC knows that, it is conservative
in applying type improvement via FunDeps. Also his examples either break
the FunDeps Coverage Condition -- so needing `UndecidableInstances`; or
use dependents (rhs of FunDeps arrow) with no free vars, so there's no
algorithmic determinism.)
If we desugar FunDeps to Type Families, and allow them to be Closed Type
Families, then we can carry on breaking FunDeps Consistency, via
overlapping equations.
If OTOH we desugar FunDeps to Open Type Families, then we can't write
overlapping equations; therefore we can't define (for example) a type-
level Type Equality test. (This is somewhat orthogonal to whether we can
write overlapping instances for the Class.)
I can see the combination of FunDeps and `OverlappingInstances` is deadly
for consistency. (To be precise, overlap of the determinants for FunDeps,
on lhs of the arrow.) I can also see how terrifically useful it is -- for
example for all sorts of record-like systems from HList onwards.
I think I could make an argument that actually the combo
FunDeps+Overlapping is consistent. That would need going back to the
database Relational Theory from which Mark Jones borrowed FunDeps. And
would require some discipline in what instances you declare. (I think most
people actually observe that discipline, but GHC doesn't enforce it. I
have an idea how we could help GHC enforce it -- a very old, recycled idea
from Tom Schrijvers/CHRs.)
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11534#comment:32>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list