//@NO-IMPLICIT-PRELUDE #[implicit] type Num 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, } let num : Num Int = { (+) = \l r -> l #Int+ r, (-) = \l r -> l #Int- r, (*) = \l r -> l #Int* r, (/) = \l r -> l #Int/ r, } #[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.(/) { Num, (+), (-), (*), (/), num, }