- (+) i1@(S# i) i2@(S# j)
- = case addIntC# i j of { (# r, c #) ->
- if c ==# 0# then S# r
- else toBig i1 + toBig i2 }
- (+) i1@(J# _ _) i2@(S# _) = i1 + toBig i2
- (+) i1@(S# _) i2@(J# _ _) = toBig i1 + i2
- (+) (J# s1 d1) (J# s2 d2)
- = case plusInteger# s1 d1 s2 d2 of (# s, d #) -> J# s d
-
- (-) i1@(S# i) i2@(S# j)
- = case subIntC# i j of { (# r, c #) ->
- if c ==# 0# then S# r
- else toBig i1 - toBig i2 }
- (-) i1@(J# _ _) i2@(S# _) = i1 - toBig i2
- (-) i1@(S# _) i2@(J# _ _) = toBig i1 - i2
- (-) (J# s1 d1) (J# s2 d2)
- = case minusInteger# s1 d1 s2 d2 of (# s, d #) -> J# s d
-
- (*) i1@(S# i) i2@(S# j)
- = case mulIntC# i j of { (# r, c #) ->
- if c ==# 0# then S# r
- else toBig i1 * toBig i2 }
- (*) i1@(J# _ _) i2@(S# _) = i1 * toBig i2
- (*) i1@(S# _) i2@(J# _ _) = toBig i1 * i2
- (*) (J# s1 d1) (J# s2 d2)
- = case timesInteger# s1 d1 s2 d2 of (# s, d #) -> J# s d
-
- negate (S# (-2147483648#)) = 2147483648
- negate (S# i) = S# (negateInt# i)
- negate (J# s d) = J# (negateInt# s) d