Lambda calculus with cartesian products and a strong monad [1].
The monad is the free monoid monad [4]
algebras of this monad are monoids [4]
A strength A x TB --> T(A x B) for this monad
Product interplay with the Monad
iterations
Operational Semantics
Lazy evaluation [8]
Value-passing bisimulation [9]
Suggestions
Make the monad visible as boxing operator, so that users are visually aware of the iterations/type reconcilations taking place. (This is consistent with Paul Fisher's experience as a user.)
Make the unit and multiplication of the monad (ie one-element list wrapper and flattening) primitive operations rather than processors.
Maybe more natural to use the computational lambda calculus, ie to use lists as uniform return type, with simple strings seen as one-element lists.