packages feed

ddc-code-0.4.2.1: tetra/base/Data/Numeric/Nat.ds

module Data.Numeric.Nat
export  { add; sub;  mul; div; rem
        ; eq;  neq; lt;   le;  gt;  ge
        ; shl; shr; band; bor; bxor
        ; divMod }
import Data.Tuple
where

-------------------------------------------------------------------------------
-- Names used by the Source Tetra desugarer to implement infix operators.
add x y         = add# [Nat#] x y

sub x y         
 = if x == 0 
        then 0
        else sub# [Nat#] x y

mul x y         = mul#  [Nat#] x y
div x y         = div#  [Nat#] x y
rem x y         = rem#  [Nat#] x y

eq  x y         = eq#   [Nat#] x y
neq x y         = neq#  [Nat#] x y
lt  x y         = lt#   [Nat#] x y
le  x y         = le#   [Nat#] x y
gt  x y         = gt#   [Nat#] x y
ge  x y         = ge#   [Nat#] x y


-------------------------------------------------------------------------------
-- Aliases for other arithmetic functions
shl  x y        = shl#  [Nat#] x y
shr  x y        = shr#  [Nat#] x y
band x y        = band# [Nat#] x y
bor  x y        = bor#  [Nat#] x y
bxor x y        = bxor# [Nat#] x y 


divMod (n m: Nat#): Tup2 Nat# Nat#
 = T2 (div n m) (rem n m)