[GHC] #12048: Allow CustomTypeErrors in type synonyms (+ evaluate nested type family?)

GHC ghc-devs at haskell.org
Thu May 12 07:00:05 UTC 2016


#12048: Allow CustomTypeErrors in type synonyms (+ evaluate nested type family?)
-------------------------------------+-------------------------------------
           Reporter:  Iceland_jack   |             Owner:
               Type:  feature        |            Status:  new
  request                            |
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.1
           Keywords:                 |  Operating System:  Unknown/Multiple
  CustomTypeErrors                   |
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 I didn't find a ticket with this, but with wiki:CustomTypeErrors you can't
 define a type synonym without it erroring:

 {{{#!hs
 -- error: …
 --     • onetwothree
 --     • In the type synonym declaration for ‘ERROR’
 -- Compilation failed.
 type ERROR = TypeError (Text "onetwothree")
 }}}

 but I often want to abstract over error messages since they are clunky to
 write at the type level and I often use a similar message in many
 different type families, especially when they can be determined by a type
 family. Here's a hypothetical example:

 {{{#!hs
 type family
   Whoami (ty :: Type) :: Symbol where
   Whoami Int   = "a number"
   Whoami Float = "a number"
   Whoami [_]   = "a list of things"
   Whoami _     = "something else"
 }}}

 I would like to write

 {{{#!hs
 type Error ty =
   TypeError (Text "Expected a <...> but got ":<>: Text (Whoami ty))
 }}}

 ----

 Even when ‘inlined’, it displays `Expected a GRUE but got 'Text (Whoami
 Int)` and not `• Expected a GRUE but got a number.`:

 {{{#!hs
 a :: TypeError (Text "Expected a GRUE but got ":<>: Text (Whoami Int))
 a = 'a'
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12048>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list