JSFiddle - React, Tailwind, and code Playground

JavaScript

var xs = take(10, fib(-1, 1));

alert(JSON.stringify(toArray(xs)));

function fib(a, b) {
    var c = a + b;
    return cons(c, lazy(fib, [b, c]));
}

function take(n, xs) {
    return xs && n > 0 ?
        cons(xs.head, lazy(take, [n - 1, eval(xs.tail)])) :
    null;
}

function toArray(xs) {
    return xs ?
        [xs.head].concat(toArray(eval(xs.tail))) :
    [];
}

function lazy(f, a) {
    return function (k) {
        return k(apply(f, a));
    };
}

function apply(f, a) {
    return f.apply(null, a);
}

function cons(head, tail) {
    return {
        head: head,
        tail: tail
    };
}

function eval(a) {
    return typeof a === "function" ? a(id) : a;
}

function id(a) {
    return a;
}