anchor.diff:  
   -module(es_parse).
   
  --export([toplevel/1]).
  -
  +-export([ toplevel/1
  +        ]).
  +
  +-type sexpr() :: term().
  +-type ast() :: term().
  +
  +%% API -------------------------------------------------------------------------
  +
  +-spec toplevel(sexpr()) -> ast().
   toplevel(Sexpr) ->
     parse(Sexpr, es_env:empty(), true).
  +
  +%% Internals -------------------------------------------------------------------
   
   parse(Sexpr, Env) ->
     parse(Sexpr, Env, false).
  
positive.code:     [Pred, Then, Else] ->
        {'ES:IF', parse(Pred, Env), parse(Then, Env), parse(Else, Env)};
      [Pred, Then] ->
        {'ES:IF', parse(Pred, Env), parse(Then, Env), {'ES:QUOTE', []}}; % XXX: #!undefined
      _ ->
        erlang:throw({bad_if, Tl})
    end.
  
negative.code: %%% Parses a top-level S-expression and converts it to an abstract syntax
  %%% tree (AST).
  %%%
  %%% Notes:
  %%% - Variadic functions (with "rest" parameters) are not supported, since
  %%%   they mess up calling conventions and interoperability with Erlang.
  %%%
  %%% Extensions:
  %%% - (lambda M:F/A) evaluates to the function F of arity A exported from module M,
  %%%   M, F, and A are all evaluated except that if M or F are unbound variables, they
  