Wired-in data-constructors with UNPACKed fields

Hello *, I'm a bit stuck with the wired-in type aspect of integer-gmp2 and was hoping someone with more experience in this area could provide direction on how to properly register the data definition data Integer = SI# Int# | Jp# {-# UNPACK #-} !BigNat | Jn# {-# UNPACK #-} !BigNat data BigNat = BN# ByteArray# with compiler/prelude/TysWiredIn.lhs Right now I'm getting the Lint-failure Unfolding of sqrInteger <no location info>: Warning: In the expression: $wsqrBigNat dt Argument value doesn't match argument type: Fun type: ByteArray# -> BigNat Arg type: BigNat Arg: dt where sqrBigNat :: BigNat -> BigNat which seems to be caused by the UNPACK property not being handled correctly. The full error message can be found at http://git.haskell.org/ghc.git/commitdiff/13cb42bc8b6b26d3893d4ddcc22eeab36d... and the other half of the integer-gmp2 patch can be found at http://git.haskell.org/ghc.git/commitdiff/b5ed2f277e551dcaade5837568e4cbb7dd... or alternatively https://phabricator.haskell.org/D82 Thanks in advance, hvr

Herbert You'll see that 'pcDataCon' in TysWiredIn ultimately calls pcDataConWithFixity'. And that builds a data constructor with a NoDataConRep field, comment "Wired-in types are too simple to need wrappers". But your wired-in type is NOT too simply to need a wrapper! You'll need to build a suitable DCR record (see DataCon.lhs), which will be something of a nuisance for you, although you can doubtless re-use utility functions that are currently used to build a DCR record. Alternatively, just put a ByteArray# as the argument of JP# and JN#. After all, you have Int# as the argument of SI#! Simon | -----Original Message----- | From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Herbert | Valerio Riedel | Sent: 17 August 2014 14:16 | To: ghc-devs | Subject: Wired-in data-constructors with UNPACKed fields | | Hello *, | | I'm a bit stuck with the wired-in type aspect of integer-gmp2 and was | hoping someone with more experience in this area could provide direction | on how to properly register the data definition | | data Integer = SI# Int# | | Jp# {-# UNPACK #-} !BigNat | | Jn# {-# UNPACK #-} !BigNat | | data BigNat = BN# ByteArray# | | with compiler/prelude/TysWiredIn.lhs | | Right now I'm getting the Lint-failure | | Unfolding of sqrInteger | <no location info>: Warning: | In the expression: $wsqrBigNat dt | Argument value doesn't match argument type: | Fun type: ByteArray# -> BigNat | Arg type: BigNat | Arg: dt | | where | | sqrBigNat :: BigNat -> BigNat | | which seems to be caused by the UNPACK property not being handled | correctly. | | | | The full error message can be found at | | | http://git.haskell.org/ghc.git/commitdiff/13cb42bc8b6b26d3893d4ddcc22eeab | 36d39a0c7 | | and the other half of the integer-gmp2 patch can be found at | | | http://git.haskell.org/ghc.git/commitdiff/b5ed2f277e551dcaade5837568e4cbb | 7dd811c04 | | or alternatively | | https://phabricator.haskell.org/D82 | | | Thanks in advance, | hvr | _______________________________________________ | ghc-devs mailing list | ghc-devs@haskell.org | http://www.haskell.org/mailman/listinfo/ghc-devs
participants (2)
-
Herbert Valerio Riedel
-
Simon Peyton Jones