foldable and traversable (haskell)
1. Foldable type class
Foldable
is a typeclass (see Typeclasses in Haskell)
The key method of a Foldable instance is foldMap
class Foldable a where foldMap :: Monoid m => (a -> m) -> t a -> m
Basically, you have a foldable context. You map everything in that context to a monoid (haskell) and then you use mappend
to collapse all the monoids into one value.
2. Traversable type class
The key method of a Traversable instance is traverse
class (Functor t, Foldable t) => Traversable t where traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
Basically, you have some structure. You apply a function to everything in that structure (without changing it) to get a new context for each piece, and combine those pieces to get a new context for the structure.
See also: sequenceA in applicative functors.