
#11581: TypeError requires UndecidableInstances unnecessarily -------------------------------------+------------------------------------- Reporter: rwbarton | Owner: Type: feature request | Status: new Priority: low | Milestone: Component: Compiler (Type | Version: 8.0.1-rc2 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: GHC rejects | Test Case: indexed- valid program | types/should_compile/T11581 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by rwbarton): Great. Now instead of special-casing `TypeError`, I was hoping to do the following. Replace {{{ type family TypeError (a :: ErrorMessage) :: b where }}} with {{{ type family TypeError :: ErrorMessage -> b where }}} Unfortunately the kind argument `b` is still considered to be an indexed argument rather than a parametric argument, as shown by `-fprint-explicit- kinds`. {{{ *Pair2> :i GHC.TypeLits.TypeError type family GHC.TypeLits.TypeError b (a :: ErrorMessage) Kind: forall b1. ErrorMessage -> b1 -- Defined in ‘GHC.TypeLits’ *Pair2> :i TypeError type family TypeError b Kind: forall b1. ErrorMessage -> b1 -- Defined at Pair2.hs:16:1 }}} Can we make `b` a parametric argument, i.e., `TypeError` have arity 0, even counting kind arguments? Then we wouldn't need a special case for `TypeError` at all. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11581#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler