[GHC] #15073: Unable to newtype derive `Prim` via DerivingStrategies
GHC
ghc-devs at haskell.org
Fri Apr 20 17:55:05 UTC 2018
#15073: Unable to newtype derive `Prim` via DerivingStrategies
-------------------------------------+-------------------------------------
Reporter: fosskers | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.2.2
Keywords: | Operating System: Unknown/Multiple
Architecture: x86_64 | Type of failure: None/Unknown
(amd64) |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
The following compiles with both GHC 8.2.2 and 8.4.1:
{{{#!hs
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
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15073>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list