gluon 0.18.2

A static, type inferred programming language for application embedding
Documentation
//@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,
}