
#15347: QuantifiedConstraints: Implication constraints with type families don't work -------------------------------------+------------------------------------- Reporter: aaronvargo | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 8.5 checker) | Keywords: Resolution: | QuantifiedConstraints Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by aaronvargo): I don't see why that is though. Why can't `ft` be made an implicit parameter to the class? If it were possible to explicitly bind the implicit parameters of a class, perhaps we could write something like: {{{#!hs class forall ft. (ft ~ F t, forall a. Eq a => Eq (ft a)) => C t }}} Hmm, it is possible to make `ft` implicit using a proxy though: {{{#!hs class (ft ~ F t, forall a. Eq a => Eq (ft a)) => C (p :: Proxy ft) t where type F t :: * -> * -- this works foo :: forall t a. (C 'Proxy t, Eq a) => Dict (Eq (F t a)) foo = Dict }}} This still requires adding a parameter, but would only require adding one to each class rather than potentially several, as we can use a single proxy for all of the extra parameters. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15347#comment:18 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler