Commit 6243bba7 authored by Sebastian Graf's avatar Sebastian Graf Committed by Ben Gamari

Add 'addWordC#' PrimOp

This is mostly for congruence with 'subWordC#' and '{add,sub}IntC#'.
I found 'plusWord2#' while implementing this, which both lacks
documentation and has a slightly different specification than
'addWordC#', which means the generic implementation is unnecessarily
complex.

While I was at it, I also added lacking meta-information on PrimOps
and refactored 'subWordC#'s generic implementation to be branchless.

Reviewers: bgamari, simonmar, jrtc27, dfeuer

Reviewed By: bgamari, dfeuer

Subscribers: dfeuer, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4592
parent 418881f7
......@@ -556,6 +556,7 @@ data CallishMachOp
| MO_U_QuotRem Width
| MO_U_QuotRem2 Width
| MO_Add2 Width
| MO_AddWordC Width
| MO_SubWordC Width
| MO_AddIntC Width
| MO_SubIntC Width
......
......@@ -803,6 +803,7 @@ pprCallishMachOp_for_C mop
MO_U_QuotRem {} -> unsupported
MO_U_QuotRem2 {} -> unsupported
MO_Add2 {} -> unsupported
MO_AddWordC {} -> unsupported
MO_SubWordC {} -> unsupported
MO_AddIntC {} -> unsupported
MO_SubIntC {} -> unsupported
......
......@@ -907,6 +907,11 @@ callishPrimOpSupported dflags op
|| llvm -> Left (MO_Add2 (wordWidth dflags))
| otherwise -> Right genericWordAdd2Op
WordAddCOp | (ncg && (x86ish
|| ppc))
|| llvm -> Left (MO_AddWordC (wordWidth dflags))
| otherwise -> Right genericWordAddCOp
WordSubCOp | (ncg && (x86ish
|| ppc))
|| llvm -> Left (MO_SubWordC (wordWidth dflags))
......@@ -1043,17 +1048,64 @@ genericWordAdd2Op [res_h, res_l] [arg_x, arg_y]
(bottomHalf (CmmReg (CmmLocal r1))))]
genericWordAdd2Op _ _ = panic "genericWordAdd2Op"
-- | Implements branchless recovery of the carry flag @c@ by checking the
-- leftmost bits of both inputs @a@ and @b@ and result @r = a + b@:
--
-- @
-- c = a&b | (a|b)&~r
-- @
--
-- https://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/
genericWordAddCOp :: GenericOp
genericWordAddCOp [res_r, res_c] [aa, bb]
= do dflags <- getDynFlags
emit $ catAGraphs [
mkAssign (CmmLocal res_r) (CmmMachOp (mo_wordAdd dflags) [aa,bb]),
mkAssign (CmmLocal res_c) $
CmmMachOp (mo_wordUShr dflags) [
CmmMachOp (mo_wordOr dflags) [
CmmMachOp (mo_wordAnd dflags) [aa,bb],
CmmMachOp (mo_wordAnd dflags) [
CmmMachOp (mo_wordOr dflags) [aa,bb],
CmmMachOp (mo_wordNot dflags) [CmmReg (CmmLocal res_r)]
]
],
mkIntExpr dflags (wORD_SIZE_IN_BITS dflags - 1)
]
]
genericWordAddCOp _ _ = panic "genericWordAddCOp"
-- | Implements branchless recovery of the carry flag @c@ by checking the
-- leftmost bits of both inputs @a@ and @b@ and result @r = a - b@:
--
-- @
-- c = ~a&b | (~a|b)&r
-- @
--
-- https://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/
genericWordSubCOp :: GenericOp
genericWordSubCOp [res_r, res_c] [aa, bb] = do
dflags <- getDynFlags
emit $ catAGraphs
[ -- Put the result into 'res_r'.
mkAssign (CmmLocal res_r) $
CmmMachOp (mo_wordSub dflags) [aa, bb]
-- Set 'res_c' to 1 if 'bb > aa' and to 0 otherwise.
, mkAssign (CmmLocal res_c) $
CmmMachOp (mo_wordUGt dflags) [bb, aa]
]
genericWordSubCOp [res_r, res_c] [aa, bb]
= do dflags <- getDynFlags
emit $ catAGraphs [
mkAssign (CmmLocal res_r) (CmmMachOp (mo_wordSub dflags) [aa,bb]),
mkAssign (CmmLocal res_c) $
CmmMachOp (mo_wordUShr dflags) [
CmmMachOp (mo_wordOr dflags) [
CmmMachOp (mo_wordAnd dflags) [
CmmMachOp (mo_wordNot dflags) [aa],
bb
],
CmmMachOp (mo_wordAnd dflags) [
CmmMachOp (mo_wordOr dflags) [
CmmMachOp (mo_wordNot dflags) [aa],
bb
],
CmmReg (CmmLocal res_r)
]
],
mkIntExpr dflags (wORD_SIZE_IN_BITS dflags - 1)
]
]
genericWordSubCOp _ _ = panic "genericWordSubCOp"
genericIntAddCOp :: GenericOp
......
......@@ -377,6 +377,9 @@ genCall t@(PrimTarget (MO_SubIntC w)) [dstV, dstO] [lhs, rhs] =
genCall t@(PrimTarget (MO_Add2 w)) [dstO, dstV] [lhs, rhs] =
genCallWithOverflow t w [dstV, dstO] [lhs, rhs]
genCall t@(PrimTarget (MO_AddWordC w)) [dstV, dstO] [lhs, rhs] =
genCallWithOverflow t w [dstV, dstO] [lhs, rhs]
genCall t@(PrimTarget (MO_SubWordC w)) [dstV, dstO] [lhs, rhs] =
genCallWithOverflow t w [dstV, dstO] [lhs, rhs]
......@@ -490,6 +493,7 @@ genCallWithOverflow t@(PrimTarget op) w [dstV, dstO] [lhs, rhs] = do
let valid = op `elem` [ MO_Add2 w
, MO_AddIntC w
, MO_SubIntC w
, MO_AddWordC w
, MO_SubWordC w
]
MASSERT(valid)
......@@ -800,6 +804,8 @@ cmmPrimOpFunctions mop = do
++ showSDoc dflags (ppr $ widthToLlvmInt w)
MO_Add2 w -> fsLit $ "llvm.uadd.with.overflow."
++ showSDoc dflags (ppr $ widthToLlvmInt w)
MO_AddWordC w -> fsLit $ "llvm.usub.with.overflow."
++ showSDoc dflags (ppr $ widthToLlvmInt w)
MO_SubWordC w -> fsLit $ "llvm.usub.with.overflow."
++ showSDoc dflags (ppr $ widthToLlvmInt w)
......
......@@ -1333,6 +1333,7 @@ genCCall target dest_regs argsAndHints
PrimTarget (MO_U_Mul2 width) -> multOp2 platform width dest_regs
argsAndHints
PrimTarget (MO_Add2 _) -> add2Op platform dest_regs argsAndHints
PrimTarget (MO_AddWordC _) -> addcOp platform dest_regs argsAndHints
PrimTarget (MO_SubWordC _) -> subcOp platform dest_regs argsAndHints
PrimTarget (MO_AddIntC width) -> addSubCOp ADDO platform width
dest_regs argsAndHints
......@@ -1523,6 +1524,11 @@ genCCall target dest_regs argsAndHints
add2Op _ _ _
= panic "genCCall: Wrong number of arguments/results for add2"
addcOp platform [res_r, res_c] [arg_x, arg_y]
= add2Op platform [res_c {-hi-}, res_r {-lo-}] [arg_x, arg_y]
addcOp _ _ _
= panic "genCCall: Wrong number of arguments/results for addc"
-- PowerPC subfc sets the carry for rT = ~(rA) + rB + 1,
-- which is 0 for borrow and 1 otherwise. We need 1 and 0
-- so xor with 1.
......@@ -2025,6 +2031,7 @@ genCCall' dflags gcp target dest_regs args
MO_U_QuotRem {} -> unsupported
MO_U_QuotRem2 {} -> unsupported
MO_Add2 {} -> unsupported
MO_AddWordC {} -> unsupported
MO_SubWordC {} -> unsupported
MO_AddIntC {} -> unsupported
MO_SubIntC {} -> unsupported
......
......@@ -667,6 +667,7 @@ outOfLineMachOp_table mop
MO_U_QuotRem {} -> unsupported
MO_U_QuotRem2 {} -> unsupported
MO_Add2 {} -> unsupported
MO_AddWordC {} -> unsupported
MO_SubWordC {} -> unsupported
MO_AddIntC {} -> unsupported
MO_SubIntC {} -> unsupported
......
......@@ -2229,6 +2229,8 @@ genCCall _ is32Bit target dest_regs args = do
ADC format (OpImm (ImmInteger 0)) (OpReg reg_h)
return code
_ -> panic "genCCall: Wrong number of arguments/results for add2"
(PrimTarget (MO_AddWordC width), [res_r, res_c]) ->
addSubIntC platform ADD_CC (const Nothing) CARRY width res_r res_c args
(PrimTarget (MO_SubWordC width), [res_r, res_c]) ->
addSubIntC platform SUB_CC (const Nothing) CARRY width res_r res_c args
(PrimTarget (MO_AddIntC width), [res_r, res_c]) ->
......@@ -2788,6 +2790,7 @@ outOfLineCmmOp mop res args
MO_Add2 {} -> unsupported
MO_AddIntC {} -> unsupported
MO_SubIntC {} -> unsupported
MO_AddWordC {} -> unsupported
MO_SubWordC {} -> unsupported
MO_U_Mul2 {} -> unsupported
MO_WriteBarrier -> unsupported
......
......@@ -265,6 +265,7 @@ primop IntAddCOp "addIntC#" GenPrimOp Int# -> Int# -> (# Int#, Int# #)
nonzero if overflow occurred (the sum is either too large
or too small to fit in an {\tt Int#}).}
with code_size = 2
commutable = True
primop IntSubCOp "subIntC#" GenPrimOp Int# -> Int# -> (# Int#, Int# #)
{Subtract signed integers reporting overflow.
......@@ -328,15 +329,25 @@ primtype Word#
primop WordAddOp "plusWord#" Dyadic Word# -> Word# -> Word#
with commutable = True
primop WordAddCOp "addWordC#" GenPrimOp Word# -> Word# -> (# Word#, Int# #)
{Add unsigned integers reporting overflow.
The first element of the pair is the result. The second element is
the carry flag, which is nonzero on overflow. See also {\tt plusWord2#}.}
with code_size = 2
commutable = True
primop WordSubCOp "subWordC#" GenPrimOp Word# -> Word# -> (# Word#, Int# #)
{Subtract unsigned integers reporting overflow.
The first element of the pair is the result. The second element is
the carry flag, which is nonzero on overflow.}
with code_size = 2
-- Returns (# high, low #) (or equivalently, (# carry, low #))
primop WordAdd2Op "plusWord2#" GenPrimOp
Word# -> Word# -> (# Word#, Word# #)
with commutable = True
primop WordAdd2Op "plusWord2#" GenPrimOp Word# -> Word# -> (# Word#, Word# #)
{Add unsigned integers, with the high part (carry) in the first
component of the returned pair and the low part in the second
component of the pair. See also {\tt addWordC#}.}
with code_size = 2
commutable = True
primop WordSubOp "minusWord#" Dyadic Word# -> Word# -> Word#
......
......@@ -126,7 +126,6 @@ Runtime system
Template Haskell
~~~~~~~~~~~~~~~~
``ghc`` library
~~~~~~~~~~~~~~~
......@@ -141,6 +140,12 @@ Template Haskell
``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
have not been moved to ``base``, and they still reside in ``contravariant``.
``ghc-prim`` library
~~~~~~~~~~~~~~~~~~~~
- Version number 0.5.2.1 (was 0.5.2.0)
- Added new ``addWordC#`` operation for unsigned addition with carry.
Build system
~~~~~~~~~~~~
......
......@@ -36,7 +36,7 @@ library
UnboxedTuples
CPP
build-depends: ghc-prim == 0.5.2.0,
build-depends: ghc-prim == 0.5.2.*,
base >= 4.9.0 && < 4.13,
bytestring >= 0.10.6.0
ghc-options: -Wall
......
## 0.5.2.1 (edit as necessary)
- Shipped with GHC 8.6.1
- Added to `GHC.Prim`:
addWordC# :: Word# -> Word# -> (# Word#, Int# #)
## 0.5.2.0
- Shipped with GHC 8.4.1
......
cabal-version: 2.1
name: ghc-prim
version: 0.5.2.0
version: 0.5.2.1
-- NOTE: Don't forget to update ./changelog.md
license: BSD-3-Clause
license-file: LICENSE
......
......@@ -44,5 +44,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -4,5 +4,5 @@
Instantiating q
[1 of 1] Including p[Int=base-4.12.0.0:GHC.Exts]
Instantiating p[Int=base-4.12.0.0:GHC.Exts]
[1 of 1] Including ghc-prim-0.5.2.0
[1 of 1] Including ghc-prim-0.5.2.1
[1 of 1] Compiling Int[sig] ( p/Int.hsig, bkp16.out/p/p-97PZnzqiJmd2hTwUNGdjod/Int.o )
......@@ -7,7 +7,7 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
[1 of 1] Compiling A ( A.hs, A.o )
TYPE SIGNATURES
......@@ -18,5 +18,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,7 +3,7 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
[
{"span": null,"doc": "TYPE SIGNATURES\n foo :: forall a. a -> a\nTYPE CONSTRUCTORS\nCOERCION AXIOMS\nDependent modules: []\nDependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,\n integer-gmp-1.0.2.0]","severity": "SevOutput","reason": null}]
{"span": null,"doc": "TYPE SIGNATURES\n foo :: forall a. a -> a\nTYPE CONSTRUCTORS\nCOERCION AXIOMS\nDependent modules: []\nDependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,\n integer-gmp-1.0.2.0]","severity": "SevOutput","reason": null}]
......@@ -20,5 +20,5 @@ INSTANCES
FAMILY INSTANCES
type Elem (ListColl a)
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -5,5 +5,5 @@ TYPE CONSTRUCTORS
data Foo x y z = Foo x y z
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -20,5 +20,5 @@ COERCION AXIOMS
FAMILY INSTANCES
data instance Sing
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -7,5 +7,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -230,5 +230,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -13,5 +13,5 @@ INSTANCES
-- Defined at Meltdown.hs:11:10
instance Monad (NukeMonad a b) -- Defined at Meltdown.hs:15:10
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -19,5 +19,5 @@ COERCION AXIOMS
FAMILY INSTANCES
data instance Sing
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -9,5 +9,5 @@ COERCION AXIOMS
F _t = Int
-- Defined at NamedWildcardInTypeFamilyInstanceLHS.hs:5:3
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -5,5 +5,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -9,5 +9,5 @@ TYPE CONSTRUCTORS
data GenParser tok st a = GenParser tok st a
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,7 +3,7 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
SomethingShowable.hs:5:1: warning: [-Wsimplifiable-class-constraints (in -Wdefault)]
......
......@@ -11,5 +11,5 @@ FAMILY INSTANCES
type instance F Int _
type instance F Bool _
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -3,5 +3,5 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
integer-gmp-1.0.2.0]
......@@ -4,7 +4,7 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
COERCION AXIOMS