public DamerauLevenshteinCorrelater(IDistanceCalculator <T> distanceCalculator, ITranspositionCalculator <T> transpositionCalculator, IRemovalCalculator <T> removalCalculator, IInsertionCalculator <T> insertionCalculator)
        {
            if (default(T) != null && typeof(T) != typeof(char))
            {
                throw new EnumerableCorrelaterException($"{nameof(T)} must be nullable or a char");
            }

            this.distanceCalculator      = distanceCalculator;
            this.transpositionCalculator = transpositionCalculator;
            this.removalCalculator       = removalCalculator;
            this.insertionCalculator     = insertionCalculator;
        }
 public DamerauLevenshteinCorrelater(IDistanceCalculator <T> distanceCalculator, ITranspositionCalculator <T> transpositionCalculator, uint removalCost, uint insertionCost) :
     this(distanceCalculator, transpositionCalculator, new BasicRemovalCalculator <T>(removalCost), new BasicInsertionCalculator <T>(insertionCost))
 {
 }