• Andrew Martin's avatar
    Implement the -XUnliftedNewtypes extension. · effdd948
    Andrew Martin authored
    GHC Proposal: 0013-unlifted-newtypes.rst
    Discussion: https://github.com/ghc-proposals/ghc-proposals/pull/98
    Issues: #15219, #1311, #13595, #15883
    Implementation Details:
      Note [Implementation of UnliftedNewtypes]
      Note [Unifying data family kinds]
      Note [Compulsory newtype unfolding]
    This patch introduces the -XUnliftedNewtypes extension. When this
    extension is enabled, GHC drops the restriction that the field in
    a newtype must be of kind (TYPE 'LiftedRep). This allows types
    like Int# and ByteArray# to be used in a newtype. Additionally,
    coerce is made levity-polymorphic so that it can be used with
    newtypes over unlifted types.
    The bulk of the changes are in TcTyClsDecls.hs. With -XUnliftedNewtypes,
    getInitialKind is more liberal, introducing a unification variable to
    return the kind (TYPE r0) rather than just returning (TYPE 'LiftedRep).
    When kind-checking a data constructor with kcConDecl, we attempt to
    unify the kind of a newtype with the kind of its fie...
Code owners : Ben Gamari
glasgow_exts.rst 599 KB