memoize property
Memoize the result of this ZIO
in a Deferred.
The result will be computed only once, and subsequent calls will return the same value.
Implementation
IO<ZIO<R, E, A>> get memoize => IO(() {
final deferred = Deferred<E, A>();
var executed = false;
return ZIO<R, E, A>.from((ctx) {
if (executed) {
return deferred.await().unsafeRun(ctx);
}
executed = true;
return tapExit(deferred.completeExit).unsafeRun(ctx);
});
});