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