public GroupParser(Parameter parameter, Class<?> clazz, List<Parameter> parameters)
    {
        this.parameter = parameter;

        parameter.offer(Properties.GREED, 0);
        parameter.offer(Properties.TYPE, clazz);

        ArrayList<Parameter> flags = new ArrayList<>();
        ArrayList<Parameter> nonPositional = new ArrayList<>();
        ArrayList<Parameter> positional = new ArrayList<>();
        for (Parameter param : parameters)
        {
            switch (param.getParameterType())
            {
                case FLAG:
                    flags.add(param);
                    break;
                case INDEXED:
                    positional.add(param);
                    break;
                case NAMED:
                    nonPositional.add(param);
                    break;
                case GROUP:
                    positional.add(param); // TODO?
                    break;
            }
        }

        this.flags = Collections.unmodifiableList(flags);
        this.nonPositional = Collections.unmodifiableList(nonPositional);
        this.positional = Collections.unmodifiableList(positional);
    }