[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