Skip to content

Core lint failure when building hgeometry-combinatorial with GHC-9.8/HEAD

On this head.hackage job, hgeometry-combinatorial is failing with a core lint error:

*** Core Lint errors : in result of Simplifier ***
src/Data/Permutation.hs:118:31: warning:
    Role incompatibility: expected nominal, got representational
    in (MVector
          (Sym (D:R:PrimStateST0[0] <s_a1lDZ>_N)
           ; (PrimState (ST (Sym (D:R:PrimStateST0[0] <s_a1lDZ>_N)))_N)_N)
          <Int>_R)_R
    In the RHS of genIndexes :: forall a.
                                Enum a =>
                                Int -> [[a]] -> Vector (Int, Int)
    In the body of lambda with binder a_a1lCv :: *
    In the body of lambda with binder $dEnum_a1lCw :: Enum a_a1lCv
    In the body of lambda with binder n_a1lxt :: Int
    In the body of lambda with binder os_a1lxu :: [[a_a1lCv]]
    In the body of lambda with binder s_a1lDZ :: *
    In the body of lambda with binder s1_a8wx :: State# s_a1lDZ
    In a case alternative: (True)
    In the body of lambda with binder s1_aiPN :: State#
                                                   (PrimState (ST s_a1lDZ))
    In the body of letrec with binders size_aiQ0 :: Int
    In a case alternative: ((#,#) ipv_a1m88 :: State#
                                                 (PrimState (ST (PrimState (ST s_a1lDZ)))),
                                  ipv1_a1m89 :: MVector
                                                  (PrimState (ST (PrimState (ST s_a1lDZ)))) Int)
    In the body of letrec with binders size_X2 :: Int
    In a case alternative: ((#,#) ipv2_a1m8c :: State#
                                                  (PrimState (ST (PrimState (ST s_a1lDZ)))),
                                  ipv3_a1m8d :: MVector
                                                  (PrimState (ST (PrimState (ST s_a1lDZ)))) Int)
    In a case alternative: (I# unbx_a8y6 :: Int#)
    In a case alternative: (MVector ipv_s1m9R :: Int#,
                                    ipv_s1m9S :: Int#,
                                    ipv_s1m9T :: MutableByteArray# s_a1lDZ)
    In a case alternative: (MVector ipv_s1m9V :: Int#,
                                    ipv_s1m9W :: Int#,
                                    ipv_s1m9X :: MutableByteArray# s_a1lDZ)
    Substitution: <InScope = {a_a1lCv s_a1lDZ}
                   IdSubst   = []
                   TvSubst   = [a1lCv :-> a_a1lCv, a1lDZ :-> s_a1lDZ]
                   CvSubst   = []>

I don't have capacity to reduce this to a standalone reproducer right now, but I thought I'd make a ticket for it.

This is building with GHC-9.8.

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