Non-strictness can be implemented with functions.<p><pre><code>    function thunk(f) { return { force: f } }
</code></pre>
This, for instance, gives you a lazy stream<p><pre><code>    function unfold(step, state) {
      return thunk(function () {
        let m = step(state);
        if (!m.ok) { 
          return {}; 
        } else {
          return { head: m.value, 
                   tail: unfold(step, m.state) };
        }
      });
    }</code></pre>