Unable to newtype derive `Prim` via DerivingStrategies
The following compiles with both GHC 8.2.2 and 8.4.1:
newtype Drain = Drain { _drain :: Word8 }
deriving stock (Eq, Ord, Show, Generic)
deriving newtype (Storable)
deriving anyclass (NFData)
However, adding Prim beside Storable in the newtype area yields the following with GHC 8.2.2:
/home/colin/code/haskell/mapalgebra/lib/Geography/MapAlgebra.hs:1148:21-24: error:
• Illegal unboxed tuple type as function argument:
(# ghc-prim-0.5.1.1:GHC.Prim.State# s1, Word8 #)
• In the expression:
ghc-prim-0.5.1.1:GHC.Prim.coerce
@(forall (s :: TYPE ghc-prim-0.5.1.1:GHC.Types.LiftedRep).
ghc-prim-0.5.1.1:GHC.Prim.MutableByteArray# s
-> ghc-prim-0.5.1.1:GHC.Prim.Int#
-> ghc-prim-0.5.1.1:GHC.Prim.State# s
-> (#,#) ghc-prim-0.5.1.1:GHC.Prim.State# s Word8)
@(forall (s :: TYPE ghc-prim-0.5.1.1:GHC.Types.LiftedRep).
ghc-prim-0.5.1.1:GHC.Prim.MutableByteArray# s
-> ghc-prim-0.5.1.1:GHC.Prim.Int#
-> ghc-prim-0.5.1.1:GHC.Prim.State# s
-> (#,#) ghc-prim-0.5.1.1:GHC.Prim.State# s Drain)
primitive-0.6.3.0:Data.Primitive.Types.readByteArray#
In an equation for ‘primitive-0.6.3.0:Data.Primitive.Types.readByteArray#’:
primitive-0.6.3.0:Data.Primitive.Types.readByteArray#
= ghc-prim-0.5.1.1:GHC.Prim.coerce
@(forall (s :: TYPE ghc-prim-0.5.1.1:GHC.Types.LiftedRep).
ghc-prim-0.5.1.1:GHC.Prim.MutableByteArray# s
-> ghc-prim-0.5.1.1:GHC.Prim.Int#
-> ghc-prim-0.5.1.1:GHC.Prim.State# s
-> (#,#) ghc-prim-0.5.1.1:GHC.Prim.State# s Word8)
@(forall (s :: TYPE ghc-prim-0.5.1.1:GHC.Types.LiftedRep).
ghc-prim-0.5.1.1:GHC.Prim.MutableByteArray# s
-> ghc-prim-0.5.1.1:GHC.Prim.Int#
-> ghc-prim-0.5.1.1:GHC.Prim.State# s
-> (#,#) ghc-prim-0.5.1.1:GHC.Prim.State# s Drain)
and this with GHC 8.4.1:
Illegal kind: ((:) (ghc-prim-0.5.2.0:GHC.Types.TupleRep ([] :: [] ghc-prim-0.5.2.0:GHC.Types.RuntimeR
ep)) ((:) ghc-prim-0.5.2.0:GHC.Types.LiftedRep ([] :: [] ghc-prim-0.5.2.0:GHC.Types.RuntimeRep) :: []
ghc-prim-0.5.2.0:GHC.Types.RuntimeRep) :: [] ghc-prim-0.5.2.0:GHC.Types.RuntimeRep)
Did you mean to enable TypeInType?
|
1132 | deriving newtype (Storable, Prim)
|
Turning on TypeInType as it suggests gives the same Illegal unboxed tuple... error.
I've hand-written Storable instances before so I'm confident in its derivation, but I otherwise know nothing about Prim. Is there something magical about it that prevents it from being newtype derived in the same way?
Thank you kindly,
Colin
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.2.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |