Non-standard monads on lists and non-empty lists.
The usual list monad is only one of infinitely many ways to turn the list functor into a monad. The same applies to the usual non-empty list monad and the non-empty list functor. This library collects such non-standard "list" and "non-empty list" monads.
exotic-list-monads
The usual list monad is only one of infinitely many ways to turn the list functor into a monad. The same applies to the usual non-empty list monad and the non-empty list functor. This library collects such non-standard "list" and "non-empty list" monads.
It is quite possible that there exist "list" and "non-empty list" monads that we are not aware of, so pull requests are appreciated. Moreover, not every monad in this library has been formally verified to be a monad (it is not a trivial task because of combinatorial explosions of the number of cases to be considered in some proofs of associativity), so if you're currently playing around with tools like Coq and have a spare afternoon...
Most of the monads defined in this module have been introduced in the following papers (although there are some new specimens as well):
Degrading Lists by Dylan McDermott, Maciej Piróg, Tarmo Uustalu (PPDP 2020),
Counting Monads on Lists by Dylan McDermott, Maciej Piróg, Tarmo Uustalu (CLA 2023),
Hybrid Programs by Renato Neves (PhD Thesis, 2018).