anchor.diff:      return result;
     }
   
  -  /**
  -   * Interprets user-defined function (aka command/operator).
  -   *
  -   * @param defn definition
  -   */
  +  /// Interprets user-defined function (aka command/operator).
  +  ///
  +  /// Takes a definition node [defn] and [scope].
     ListNode applyUserFun(DefnNode defn, ListNode tail, Scope scope) {
       ListNode formalParams = defn.vars;
       final body = defn.body;
  
positive.code:     return new ListNode.cons(Primitive.UNIT, nodes);
    }
  
    /**
     * Interprets template in lambda form 
     *
     * @param defn definition
     */
    Node applyTemplate(ListNode fn, ListNode args, Scope scope) {
      ListNode formalParams = fn.head;
      Node body = fn.tail;
  
negative.code:     return new ListNode.cons(result, tail);
    }
  
    /// Entry point, evaluates [nodes] and returns result if any.
    ///
    /// Returns result of operator, or UNIT.
    Node evalSequence(ListNode nodes) {
      return evalSequenceInScope(nodes, globalScope);
    }
  
    /// Entry point, defines [node], which must be a [DefnNode].
    ///
    /// Returns result of operator, or UNIT.
    void define(DefnNode defn) {
      globalScope.bind(defn.name, defn);
      console.processDefined(defn.name);
    }
  
    /// Evaluates all commands in [nodes].
    ///
    /// Returns result of last command, or UNIT if `nodes' was empty.
    Node evalSequenceInScope(ListNode nodes, Scope scope) {
      Node result;
      while (!nodes.isNil) {
  