On the other hand, if we have a T-algebra structure on A, we can construct a monoid structure by setting

u = α([])

m(a,b) = α([a,b])

It is clear that associativity of m follows from the associativity of α, and unitality of u follows from the unitality of α.

(((potential headache: shouldn't η show up more? Instead of the empty list, maybe?)))

1.2 Example: Vector spaces

We have free and forgetful functors

forming an adjoint pair; where the free functor takes a set S and returns the vector space with basis S; while the forgetful functor takes a vector space and returns the set of all its elements.

The composition of these yields a monad T in Set taking a set S to the set of all formal linear combinations of elements in S. The monad multiplication takes formal linear combinations of formal linear combinations and multiplies them out:

3(2v + 5w) − 5(3v + 2w) = 6v + 15w − 15v − 10w = − 9v + 5w

A T-algebra is a map that acts like a vector space in the sense that .

We can define and v + w = α(v + w). The operations thus defined are associative, distributive, commutative, and everything else we could wish for in order to define a vector space - precisely because the operations inside TA are, and α is associative.

The moral behind these examples is that using monads and monad algebras, we have significant power in defining and studying algebraic structures with categorical and algebraic tools. This paradigm ties in closely with the theory of operads - which has its origins in topology, but has come to good use within certain branches of universal algebra.

An (non-symmetric) operad is a graded set equipped with composition operations that obey certain unity and associativity conditions. As it turns out, non-symmetric operads correspond to the summands in a monad with polynomial underlying functor, and from a non-symmetric operad we can construct a corresponding monad.

The designator non-symmetric floats in this text o avoid dealing with the slightly more general theory of symmetric operads - which allow us to resort the input arguments, thus including the symmetrizer of a symmetric monoidal category in the entire definition.

To read more about these correspondences, I can recommend you start with: the blog posts Monads in Mathematics here:
[1]

2 Algebras over endofunctors

Suppose we started out with an endofunctor that is not the underlying functor of a monad - or an endofunctor for which we don't want to settle on a monadic structure. We can still do a lot of the Eilenberg-Moore machinery on this endofunctor - but we don't get quite the power of algebraic specification that monads offer us. At the core, here, lies the lack of associativity for a generic endofunctor - and algebras over endofunctors, once defined, will correspond to non-associative correspondences to their monadic counterparts.

Definition For an endofunctor , we define a P-algebra to be an arrow .

A homomorphism of P-algebras is some arrow such that the diagram below commutes:

This homomorphism definition does not need much work to apply to the monadic case as well.

2.1 Example: Groups

A group is a set G with operations , such that u is a unit for m, m is associative, and i is an inverse.

Ignoring for a moment the properties, the theory of groups is captured by these three maps, or by a diagram

Find an endofunctor of Hask whose initial object describes trees that are either binary of ternary at each point, carrying values from some A in the leaves.

Write an implementation of the monad of vector spaces in Haskell. If this is tricky, restrict the domain of the monad to, say, a 3-element set, and implement the specific example of a 3-dimensional vector space as a monad. Hint: [2] has written about this approach.