code: function(source){
      var index = 0;
      return (function go(){
        if (source[index] === "L"){
          ++index;
          return Lam(go());
        } else if (source[index] === "("){
          ++index;
          var fun = go();
          ++index;
          var arg = go();
          ++index;
          return App(fun, arg); 
        } else {
          var idx = 0;
          while (/[0-9]/.test(source[index])){
            idx = idx * 10 + Number(source[index]);
            ++index;
          };
          return Var(idx);
        }
      })();
    }
docs: String -> Term