//@NO-IMPLICIT-PRELUDE //! Operations on numbers. let { Ord } = import! std.cmp /// The basic operation on numbers. /// Defined for both the primitive type `Int` and `Float` #[implicit] type Num a = { ord : Ord a, /// The addition operator (+) : a -> a -> a, /// The subtraction operator (-) : a -> a -> a, /// The multiplication operator (*) : a -> a -> a, /// The division operator (/) : a -> a -> a, /// The negation function negate : a -> a } #[infix(left, 6)] let (+) ?num : [Num a] -> a -> a -> a = num.(+) #[infix(left, 6)] let (-) ?num : [Num a] -> a -> a -> a = num.(-) #[infix(left, 7)] let (*) ?num : [Num a] -> a -> a -> a = num.(*) #[infix(left, 7)] let (/) ?num : [Num a] -> a -> a -> a = num.(/) let negate ?num : [Num a] -> a -> a = num.negate { Num, (+), (-), (*), (/), negate, }