
#16123: QuantifiedConstraints fails to deduce trivial constraint -------------------------------------+------------------------------------- Reporter: eschnett | Owner: (none) Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler | Version: 8.6.3 Resolution: duplicate | Keywords: | QuantifiedConstraints Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #14680 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): FWIW, I think I've discovered a way to work around this issue after all. I've written up the trick in full detail [https://ghc.haskell.org/trac/ghc/ticket/14860#comment:23 here], but in the particular case of your program, the trick is to redefine `Ok` slightly: {{{#!hs type Ok k :: ObjKind -> Constraint }}} Once you've done that, you can get the desired superclass for `Functor` if you write it like this: {{{#!hs class ( Category (Dom f), Category (Cod f) -- | Prove that this functor maps from its domain to its codomain , forall okCodF a. (okCodF ~ Ok (Cod f), Ok (Dom f) a) => okCodF (f a) ) => Functor f where }}} If you do this, then the rest of the module typechecks. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16123#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler