public ImmutableHashMap <TKey, TValue> WithComparers(IEqualityComparer <TKey> keyComparer,
                                                             IEqualityComparer <TValue> valueComparer)
        {
            if (keyComparer == null)
            {
                keyComparer = EqualityComparer <TKey> .Default;
            }

            if (valueComparer == null)
            {
                valueComparer = EqualityComparer <TValue> .Default;
            }

            if (_keyComparer == keyComparer)
            {
                if (_valueComparer == valueComparer)
                {
                    return(this);
                }
                else
                {
                    return(new ImmutableHashMap <TKey, TValue>(_root, _keyComparer, valueComparer));
                }
            }
            else
            {
                var set = new ImmutableHashMap <TKey, TValue>(keyComparer, valueComparer);
                set = set.AddRange(this, overwriteOnCollision: false, avoidToHashMap: true);
                return(set);
            }
        }