This is a toy project for learning how to implement delayed monadic streams in C++. It’s inspired by Bartosz Milewski’s “Getting Lazy with C++” [https://bartoszmilewski.com/2014/04/21/getting-lazy-with-c/] . I was trying to figure out how this could work, and how it could be made thread-safe. I also wanted a maximally lazy fold, such that an infinite stream could still be folded. Much of that was based on suggestions from the Scheme SRFI 45 [http://srfi.schemers.org/srfi-45/srfi-45.html]
Other goals were getting this working with CMake, Google Test, and Google Benchmark.