[GHC] #11534: Allow class associated types to reference functional dependencies
GHC
ghc-devs at haskell.org
Sat Dec 22 11:43:08 UTC 2018
#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 [comment:30 dfeuer]:
> I think the choice to reuse `->` was a bit fishy from the start.
The arrow was borrowed straight from database Functional Dependencies. (I
guess it helped that `->` was already a recognised lexeme.)
But note that Mark Jones' original proposal was that FunDeps should look
like this
{{{
class Foo a b c d | {a} -> {b, c}, {b, d} -> {a} where ...
}}}
IOW: the determinant and dependent are sets of parameters (order
immaterial). That's exactly how they look in database theory. `b d` does
indeed excite in my brain that is tyvar `b` applied to `d`. (The Haskell
abbreviated form was also taken over into injective type families, where
it gives a potential syntactic ambiguity.)
So the fishiness arose from dropping the set notation braces with
commalist.
> I'd have no objection to using some symbol other than `::` if you'd
prefer.
Aside from how to bind naming for a FunDep, beware that a Type Familiy's
parameters are positional whereas a FunDep's are not. IOW this is
(supposed to be) an entirely equivalent class decl
{{{
class Foo a b c d | d b -> a, a -> b c
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11534#comment:33>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list