packages feed

dhall-1.28.0: dhall-lang/Prelude/Integer/multiply

{-
`multiply m n` computes `m * n`.
-}

let Integer/abs =
        ./abs sha256:35212fcbe1e60cb95b033a4a9c6e45befca4a298aa9919915999d09e69ddced1
      ? ./abs

let multiply
    : Integer → Integer → Integer
    =   λ(m : Integer)
      → λ(n : Integer)
      → let mAbs = Integer/abs m

        let nAbs = Integer/abs n

        let mNonPos = Natural/isZero (Integer/clamp m)

        let nNonPos = Natural/isZero (Integer/clamp n)

        in        if mNonPos == nNonPos

            then  Natural/toInteger (mAbs * nAbs)

            else  Integer/negate (Natural/toInteger (mAbs * nAbs))

let example0 = assert : multiply +3 +5 ≡ +15

let example1 = assert : multiply -3 +5 ≡ -15

let example2 = assert : multiply -3 -5 ≡ +15

let example3 = assert : multiply +0 +5 ≡ +0

let example4 = assert : multiply +5 +0 ≡ +0

let example5 = assert : multiply +0 +0 ≡ +0

let example6 = assert : multiply +1 +5 ≡ +5

let example7 = assert : multiply +3 -1 ≡ -3

in  multiply