package coffee.liz.lambda.eval; import lombok.RequiredArgsConstructor; import java.util.function.Supplier; /** * A memoizing thunk for lazy evaluation. * * @param * Thunk type */ @RequiredArgsConstructor public final class Thunk implements Supplier { private final Supplier thinker; // https://www.youtube.com/shorts/Dzksib8YxSY private T cached = null; private boolean evaluated = false; @Override public T get() { if (!evaluated) { cached = thinker.get(); evaluated = true; } return cached; } }