
#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: | -------------------------------------+------------------------------------- Changes (by RyanGlScott): * status: new => closed * resolution: => duplicate * related: => #14680 Comment: I'm afraid what you are trying to write just won't work (at least, not today). This quantified constraint: {{{#!hs forall a. Ok (Dom f) a => Ok (Cod f) (f a) }}} Uses a type family in the head of the constraint, which GHC doesn't support. (See [https://ghc.haskell.org/trac/ghc/ticket/14860 this Trac ticket].) The fact that GHC 8.6 somehow accepts this as a superclass constraint for `Functor` is a bug, and as you've discovered, GHC won't actually use that constraint in any instances. On GHC HEAD, your (unmodified) code is rejected with an error message: {{{ $ ~/Software/ghc/inplace/bin/ghc-stage2 Bug.hs [1 of 1] Compiling CatQC ( Bug.hs, Bug.o ) Bug.hs:32:1: error: • Quantified predicate must have a class or type variable head: forall (a :: ObjKind). Ok (Dom f) a => Ok (Cod f) (f a) • In the quantified constraint ‘forall (a :: ObjKind). Ok (Dom f) a => Ok (Cod f) (f a)’ In the context: (Category (Dom f), Category (Cod f), forall (a :: ObjKind). Ok (Dom f) a => Ok (Cod f) (f a)) While checking the super-classes of class ‘Functor’ In the class declaration for ‘Functor’ | 32 | class ( Category (Dom f), Category (Cod f) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... }}} There is a workaround (described in https://ghc.haskell.org/trac/ghc/ticket/14860#comment:19) that can sometimes be used. Unfortunately, this workaround doesn't work here, because you're trying to use a quantified constraint in a superclass position. #14860 is tracking this infelicity already, so I'll close this ticket in favor of that one. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16123#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler