Lens is a library for Haskell that provides lenses, isomorphisms, folds, traversals, getters and setters, which exposes a uniform interface for querying and manipulating arbitrary structures, not unlike Java's accessor and mutator concepts.
Foldable is the class of types
t :: * -> * which admit a folding operation. A fold aggregates the elements of a structure in a well-defined order, using a combining function.
A monad is a data type of composable actions.
Monad is the class of type constructors whose values represent such actions. Perhaps
IO is the most recognizable one: a value of
IO a is a "recipe for retrieving an
a value from the real world".
We say a type constructor
m (such as
Maybe) forms a monad if there is an
instance Monad m satisfying certain laws about composition of actions. We can then reason about
m a as an "action whose result has type
Functor is the class of types
f :: * -> * which can be covariantly mapped over. Mapping a function over a data structure applies the function to all the elements of the structure without changing the structure itself.