@hackage church-list0.0.1

Lazy lists with O(1) concatenation that, unlike dlists, allow inspection

Replicates the Data.List interface for lists built around the type forall r. Monoid r => (a -> r) -> r. This allows for O(1) concatenation and snoc, just as difference lists do, but without requiring that every operation (such as map) render the list.

As motivation: Although difference lists are great for use with Writer, they are horrible for use with State, because getting the list and querying an element will result in producing a structure which is thrown away. With mlists, you can both append to, and inspect, the list in progress without any wasted work.