trampa

Trampolines, to emulate tail-recursion

Usage no npm install needed!

<script type="module">
  import trampa from 'https://cdn.skypack.dev/trampa';
</script>

README

trampa

Trampolines, to emulate tail-call recursion.

Build Status NPM version Dependency Status devDependency Status Code Climate

Synopsis

var trampa = require("trampa");

function loop(n, acc) {
  return n === 0 ? trampa.wrap(acc) : trampa.lazy(function () {
    return loop(n - 1, acc + 1);
  });
}

loop(123456789, 0).run(); // doesn't cause stack overflow!

API

  • isTrampoline(t: obj): bool — Returns, whether t is a trampolined object.

  • wrap(t: Trampoline a | a): Trampoline a — Wrap t into trampoline, if it's not already one.

  • lazy(t : () -> Trampoline a | a) — Wrap lazy computation into trampoline. Useful when constructing computations.

  • Trampoline.jump(f : a -> b | Trampoline b)map or flatmap trampoline computation. Like .then for promises.

  • Trampoline.run(): a — Run the trampoline synchronously resulting a value.

Changelog

  • 1.0.02015-07-14 — Initial release