Allow CustomTypeErrors in type synonyms (+ evaluate nested type family?)
I didn't find a ticket with this, but with wiki:Proposal/CustomTypeErrors you can't define a type synonym without it erroring:
-- 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:
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
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.:
a :: TypeError (Text "Expected a GRUE but got ":<>: Text (Whoami Int)) a = 'a'