gluon 0.18.2

A static, type inferred programming language for application embedding
Documentation
let { Functor } = import! std.functor
let { Applicative } = import! std.applicative
let { Monad } = import! std.monad

let io_prim @ { IO } = import! std.io.prim


let functor : Functor IO = {
    map = \f -> io_prim.flat_map (\x -> io_prim.wrap (f x)),
}

let applicative : Applicative IO =
    let wrap = io_prim.wrap
    let apply f x = io_prim.flat_map (\g -> io_prim.flat_map (\y -> wrap (g y)) x) f

    { functor, apply, wrap }

let monad : Monad IO = {
    applicative = applicative,
    flat_map = io_prim.flat_map,
}

{ IO, functor, applicative, monad }