Pretty cool. Few suggestions (which may or may not require babel):<p>- `f.apply(null, args)` calls can be replaced with `f(...args)`<p>- Your head function returns the first argument while your last function returns an <i>array containing</i> the last argument. I&#x27;d rewrite those functions as:<p><pre><code>    const head = (x) =&gt; x;
    const last = (...xs) =&gt; xs[xs.length-1];
    const tail = (x, ...xs) =&gt; xs;
    const init = (...xs) =&gt; xs.slice(0, -1);
</code></pre>
(Unfortunately it seems the rest operator can only appear as the last argument.)<p>- Why put everything on the prototype? It doesn&#x27;t seem necessary since you are not using the `this` keyword. I would just stick the `export` keyword in front of functions to be exported.<p>Looking forward to part 2.