gluon 0.13.1

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

let { Functor } = import! std.functor
let { Foldable } = import! std.foldable
let { Applicative } = import! std.applicative

#[implicit]
type Traversable t = {
    functor : Functor t,
    foldable : Foldable t,
    traverse : forall a b m . Applicative m -> (a -> m b) -> t a -> m (t b)
}

let traverse ?t ?a : forall a b m . [Traversable t] -> [Applicative m]
        -> (a -> m b)
        -> t a
        -> m (t b)
    = t.traverse a

let sequence : [Traversable t] -> [Applicative m] -> t (m a) -> m (t a) =
    traverse (\x -> x)

let for x f : [Traversable t] -> [Applicative m] -> t a -> (a -> m b) -> m (t b) =
    traverse f x


{
    Traversable,

    traverse,
    sequence,
    for,
}