
#8516: Add (->) representation and the Invariant class to GHC.Generics -------------------------------------+------------------------------------- Reporter: nfrisby | Owner: Type: feature request | Status: new Priority: low | Milestone: Component: Compiler (Type | Version: 7.7 checker) | Resolution: | Keywords: Generics 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 simonpj): Crumbs... #9123 (about `Representational`) is a long thread! I'm totally not up to speed with all that. However, part of the mix seems to be the feasibility (or otherwise) of allowing constraints like `(forall a. Eq a => Eq [a]` instance contexts; see #2893, #2456, and #5927, etc. For example: {{{ instance (Binary a, forall b. Binary b => Binary (f b)) => Binary (GRowe f a) where ... }}} I've always said "I don't know how to implement that", but this morning it feels different. Suppose that we only allowed those quantified constraints ''in the context of a top-level instance declaration''. * Solving "Wanted" constraints of this form is easy: it's just an implication constraint. * Allowing them as "Given" constraints would be a little awkward, because it'd need a new field in the "inert set" of the constraint solver. But for instances it's all top-level-ish, so we could perhaps just extend the "local instance environment". But even in the more general form it would be quite do-able I think. So, if allowing quantified constraints will help, perhaps it's time we bit that bullet. Simon Then it would only show up as a "Given" constraint when solving instance declarations, not in some arbitrary -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8516#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler