docs: function parseFunction() {
    var args = mlutil.asArray.apply(null, arguments);
    var argLen = args.length;
    if (argLen < 2) {
      throw new Error('query parse function without module name or binding');
    }
  
    var moduleName = args[0];
  
    var constraintName = null;
    var termOptions = null;
    var arg = null;
    for (var i=1; i < args.length; i++) {
      arg = args[i];
      if (termOptions === null && arg instanceof TermOptionsDef) {
        termOptions = arg['term-option'];
        continue;
      }
      if (constraintName === null && arg instanceof BindDef) {
        constraintName = arg.constraintName;
        continue;
      }
      throw new Error('unknown argument for parse function: '+mlutil.identify(arg, true));
    }
  
    return new CustomConstraintDef(
        constraintName,
        new CustomOptionsDef(new CustomParserDef(moduleName), termOptions)
        );
  }