{-
Note [The Implicit Parameter class]

Implicit parameters `?x :: a` are desugared into dictionaries for the
class `IP "x" a`, which is defined (in GHC.Classes) as

  class IP (x :: Symbol) a | x -> a

This class is wired-in so that `error` and `undefined`, which have
wired-in types, can use the implicit-call-stack feature to provide
a call-stack alongside the error message.
-}

ipDataConName, ipTyConName, ipCoName :: Name
ipDataConName = mkWiredInDataConName UserSyntax gHC_CLASSES (fsLit "IP")
                  ipDataConKey ipDataCon
ipDataConName, ipTyConName, ipCoName :: Name
ipDataConName = mkWiredInDataConName UserSyntax gHC_CLASSES (fsLit "IP")
                  ipDataConKey ipDataCon
ipDataConName = mkWiredInDataConName UserSyntax gHC_CLASSES (fsLit "IP")
                  ipDataConKey ipDataCon