gluon 0.18.2

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,
}