Skip to content

Role annotations on classes require module-wide IncoherentInstances

Per #8773 (closed), specifying a non-nominal role for a class parameter requires IncoherentInstances:

{-# LANGUAGE RoleAnnotations #-}
{-# LANGUAGE IncoherentInstances #-}

class C c
type role C phantom

For instances, the IncoherentInstances module-wide LANGUAGE pragma has been deprecated in favour of per-instance {-# INCOHERENT #-} pragmas. However, there doesn't appear to be an equivalent for type role on classes. This is awkward because I do not want the instances of C to be marked as incoherent, and hence they cannot be defined in the same module as C.

I think it would make sense to be able to use {-# INCOHERENT #-} after type role, so that it would be accepted without module-wide IncoherentInstances.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information