[GHC] #8161: Associated type parameters that are more specific than the instance header

#8161: Associated type parameters that are more specific than the instance header -------------------------------------+------------------------------------- Reporter: adamgundry | Owner: Type: feature request | Status: new Priority: low | Milestone: Component: Compiler (Type | Version: 7.7 checker) | Operating System: Unknown/Multiple Keywords: | Type of failure: GHC rejects Architecture: Unknown/Multiple | valid program Difficulty: Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | -------------------------------------+------------------------------------- It would be nice if type parameters of associated types could be more specific than those in the instance header. This is currently rejected with the message "Type indexes must match class instance head", but could be accepted: {{{ {-# LANGUAGE TypeFamilies #-} class C a where type T a instance C [a] where type T [Bool] = Int type T [Int] = Int }}} More typically, this is useful where we want to use an equality constraint to make type inference easier, but need to match on the actual type in an associated type: {{{ {-# LANGUAGE TypeFamilies, FlexibleInstances #-} class C a where type T a instance a ~ [b] => C a where type T [b] = Int }}} This showed up in the implementation of [wiki:Records/OverloadedRecordFields/Plan OverloadedRecordFields]. Of course, one can always work around it using a normal (non-associated) type family. Note that we already allow type families to specialise variables that do not occur in the instance header: {{{ {-# LANGUAGE TypeFamilies #-} class C a where type T a b instance C [a] where type T [a] [Bool] = Bool type T [a] [Int] = Int }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8161 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC