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

GHC ghc-devs at haskell.org
Thu May 12 22:36:27 UTC 2016


#12048: Allow CustomTypeErrors in type synonyms (+ evaluate nested type family?)
-------------------------------------+-------------------------------------
        Reporter:  Iceland_jack      |                Owner:  diatchki
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.1
      Resolution:                    |             Keywords:
                                     |  CustomTypeErrors
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by Iceland_jack:

@@ -12,4 +12,4 @@
- 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:
+ but I often want to factor out error messages, they are clunky to write at
+ the type level and I often want to reuse message in many different type
+ families, especially when they can be determined by a type family. Here's
+ a hypothetical example:

New description:

 I didn't find a ticket with this, but with wiki:Proposal/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 factor out error messages, they are clunky to write at
 the type level and I often want to reuse 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#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list