code: function (token) {
          token.consume("{");
          var elements = [];
          while (token.peek() !== "}") {
              var key = this.parse_key(token);
              var arity = this.parse_arity(token, "?");
              token.consume(":");
              var spec = this.parse_spec(token);  /*  RECURSION  */
              elements.push({ type: "element", key: key, arity: arity, element: spec });
              if (token.peek() === ",")
                  token.skip();
              else
                  break;
          }
          var ast = { type: "hash", elements: elements };
          token.consume("}");
          return ast;
      }
docs: /*  parse hash type specification