gluon 0.13.1

A static, type inferred programming language for application embedding
Documentation
//@NO-IMPLICIT-PRELUDE
//! Implementation of the `Applicative` type

/// `Semigroup a` represents an associative operation on `a`.
/// This means the following laws must hold:
///
/// * `forall x . append x (append y z) == append (append x y) z`
#[implicit]
type Semigroup a = {
    /// # Note
    ///
    /// * Known as `(<>)` or `mappend` in Haskell
    append : a -> a -> a
}

let append ?s : [Semigroup a] -> a -> a -> a = s.append
#[infix(left, 4)]
let (<>) : [Semigroup a] -> a -> a -> a = append

{
    Semigroup,
    append,
    (<>),
}