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:       parse(Expr, Env, IsToplevel);
      [Expr | Rest] ->
        {'ES:SEQ', parse(Expr, Env, IsToplevel), parse_begin(Rest, Env, IsToplevel)};
      [] when IsToplevel ->       % (begin) is valid at the top-level
        {'EQ:QUOTE', []};         % TODO: #!undefined
      _ ->
        erlang:throw({bad_begin, Tl})
    end.
  