Skip to content

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'
Edited by Icelandjack
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information