/// <inheritdoc/>
    public override async ValueTask <Result <object?> > TryParseAsync
    (
        IReadOnlyList <string> tokens,
        Type type,
        CancellationToken ct = default
    )
    {
        var elementType            = type.GetCollectionElementType();
        var concreteCollectionType = typeof(List <>).MakeGenericType(elementType);

        IList collection;
        var   errors = new List <Result <object?> >();

        if (type.IsArray)
        {
            collection = Array.CreateInstance(elementType, tokens.Count);
            for (var i = 0; i < tokens.Count; i++)
            {
                var token    = tokens[i];
                var tryParse = await _typeParserService.TryParseAsync(_services, token, elementType, ct);

                if (tryParse.IsSuccess)
                {
                    collection[i] = tryParse.Entity;
                }
                else
                {
                    errors.Add(tryParse);
                }
            }
        }
        else
        {
            collection = (IList)Activator.CreateInstance(concreteCollectionType) !;
            foreach (var token in tokens)
            {
                var tryParse = await _typeParserService.TryParseAsync(_services, token, elementType, ct);

                if (tryParse.IsSuccess)
                {
                    collection.Add(tryParse.Entity);
                }
                else
                {
                    errors.Add(tryParse);
                }
            }
        }

        return(errors.Count switch
        {
            0 => Result <object?> .FromSuccess(collection),
            1 => errors[0],
            _ => new AggregateError(errors.Cast <IResult>().ToArray())
        });
    /// <inheritdoc/>
    public override async ValueTask <Result <object?> > TryParseAsync
    (
        string token,
        Type type,
        CancellationToken ct = default
    )
    {
        var concreteType = type.GetGenericArguments().Single();

        var tryParse = await _typeParserService.TryParseAsync(_services, token, concreteType, ct);

        return(tryParse.IsSuccess
            ? tryParse.Entity
            : Result <object?> .FromError(tryParse));
    }