
Hello Simon, On 2014-08-19 at 00:01:17 +0200, Simon Peyton Jones wrote: [...]
But you can probably write the code in such a way as to be mostly independent (eg explicit UNPACK rather than rely on -funbox-strict-fields), or assume that some things won't happen (e.g. souce module will not be compiled with -fomit-interface-pragmas). See MkId.mkDataConRep.
I was under the impression that even -O0 vs -O1+ makes a huge difference: As given the following program, {-# LANGUAGE MagicHash #-} module M where import GHC.Exts data T0 = C0 ByteArray# data T1 = C1 {-# UNPACK #-} !T0 | C2 {-# UNPACK #-} !Int | C3 !Int | C4 Int compilation with $ ../inplace/bin/ghc-stage2 -fforce-recomp -ddump-types -O1 -c M.hs TYPE SIGNATURES TYPE CONSTRUCTORS data T0 = C0 ByteArray# data T1 = C1 {-# UNPACK #-}T0 | C2 {-# UNPACK #-}Int | C3 {-# UNPACK #-}Int | C4 Int COERCION AXIOMS Dependent modules: [] Dependent packages: [base, ghc-prim, integer-gmp2] has everything but C4 unpacked as expected, but when using -O0, nothing is UNPACKed at all: $ ../inplace/bin/ghc-stage2 -fforce-recomp -ddump-types -O0 -c M.hs TYPE SIGNATURES TYPE CONSTRUCTORS data T0 = C0 ByteArray# data T1 = C1 !T0 | C2 !Int | C3 !Int | C4 Int COERCION AXIOMS Dependent modules: [] Dependent packages: [base, ghc-prim, integer-gmp2] ...am I interpreting the output `-ddump-types` incorrectly? PS: adding a '!' in front of the 'ByteArray#' field in `T0` is not supposed to have any effect on primitive types, is it? If so, should GHC warn about the redundant '!'? Cheers, hvr