
#14733: Won't use (forall xx. f xx) with -XQuantifiedConstraints -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.5 Resolution: | Keywords: | QuantifiedConstraints, wipT2893 Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by Iceland_jack): Only moderate? ;-) I have listed some things this rules out as Phabricator comments: * ([https://phabricator.haskell.org/D4353#121416 Phab]) A (categorical) vocabulary for constraints: `uncurry :: (a => b => c) :- ((a, b) => c)` * ([https://phabricator.haskell.org/D4353#121383 Phab]) Defining `(>>=) @(Free cls)` needs a `cls` instance for `Free cls b` but it can't range over `b`. {{{#!hs newtype Free cls a = Free (forall xx. cls xx => (a -> xx) -> xx) bind :: cls (Free cls b) => Free cls a -> (a -> Free cls b) -> Free cls b bind (Free free) f = free f }}} Instead: {{{#!hs instance (forall xx. cls (Free cls xx)) => Monad (Free cls) }}} * ([https://phabricator.haskell.org/D4353#121403 Phab]) Works: but what we really want is an instance of `Free mon` for any `forall xx. Monoid xx => mon xx` {{{#!hs instance Foldable (Free Monoid) where foldMap :: Monoid m => (a -> m) -> (Free Monoid a -> m) foldMap f (Free free) = free f instance Foldable (Free Monoid) where foldMap :: Monoid m => (a -> m) -> (Free Monoid a -> m) foldMap f (Free free) = free f }}} Your `class f a => C f a` solution didn't work for me (using latest version): here is my [https://gist.github.com/Icelandjack/6b42e7e19c7f130f2ca947495e09ca54 full code and error messages]. Echoing Sjoerd if there is a mechanical translation `class f a => C f a` can GHC do it? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14733#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler