
#9637: Type level programming needs an error function -------------------------------------+------------------------------------- Reporter: augustss | Owner: Type: feature | Status: new request | Milestone: Priority: normal | Version: 7.8.3 Component: Compiler | Keywords: Resolution: | Architecture: Unknown/Multiple Operating System: | Difficulty: Unknown Unknown/Multiple | Blocked By: Type of failure: | Related Tickets: None/Unknown | Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by augustss): Here's what I'm using now, and it works nicely. But better names would be nice. {{{#!hs type family Error (a :: k1) :: k2 where { } data ErrorAnd (a :: k1) (b :: k2) }}} When the type checker encounters the Error function it generates the error message according to the following pseudo code: {{{#!hs flatten (Symbol s) = s flatten (ErrorAnd t1 t2) = flatten t1 ++ flatten t2 flatten t = prettyPrint t }}} So for instance `Error "Oh noes!"` will generate the error message "Oh noes!". And {{{Error ("Mismatch between " `ErrorAnd` t1 `ErrorAnd` " and " `ErrorAnd` t2)}}} will generate "Mismatch between ... and ...", where ... are the pretty printing of the types t1 and t2 respectively. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9637#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler