Example
assert( (() => Maybe!int(1)).generator.take(10).equal(1.repeat.take(10)) ); assert( (() => Maybe!int.nothing).generator.empty); assert( (() { static size_t i = 0; return i++ < 10 ? Maybe!int(1) : Maybe!int.nothing; } ).generator.equal(1.repeat.take(10))); class A {} auto a = new A(); assert( (() => Maybe!A(a)).generator.take(10).equal(a.repeat.take(10)) ); assert( (() => Maybe!A.nothing).generator.empty); assert( (() { static size_t i = 0; return i++ < 10 ? Maybe!A(a) : Maybe!A.nothing; } ).generator.equal(a.repeat.take(10)));
Transforms delegate into lazy range. Generation is stopped, when genfunc returns Maybe!T.nothing.