-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Levenshtein and restricted Damerau-Levenshtein edit distances
--   
--   Optimized edit distances for fuzzy matching, including Levenshtein and
--   restricted Damerau-Levenshtein algorithms.
@package edit-distance
@version 0.2.2.1


-- | Computing the edit distances between strings
module Text.EditDistance
data Costs a
ConstantCost :: !Int -> Costs a
VariableCost :: (a -> Int) -> Costs a
data EditCosts
EditCosts :: Costs Char -> Costs Char -> Costs (Char, Char) -> Costs (Char, Char) -> EditCosts

-- | Cost of deleting the specified character from the left string
[deletionCosts] :: EditCosts -> Costs Char

-- | Cost of inserting the specified characters into the right string
[insertionCosts] :: EditCosts -> Costs Char

-- | Cost of substituting a character from the left string with one from
--   the right string -- with arguments in that order.
[substitutionCosts] :: EditCosts -> Costs (Char, Char)

-- | Cost of moving one character backwards and the other forwards -- with
--   arguments in that order.
[transpositionCosts] :: EditCosts -> Costs (Char, Char)
defaultEditCosts :: EditCosts

-- | Find the Levenshtein edit distance between two strings. That is to
--   say, the number of deletion, insertion and substitution operations
--   that are required to make the two strings equal. Note that this
--   algorithm therefore does not make use of the
--   <tt>transpositionCost</tt> field of the costs. See also:
--   <a>http://en.wikipedia.org/wiki/Levenshtein_distance</a>.
levenshteinDistance :: EditCosts -> String -> String -> Int

-- | Find the "restricted" Damerau-Levenshtein edit distance between two
--   strings. This algorithm calculates the cost of the so-called optimal
--   string alignment, which does not always equal the appropriate edit
--   distance. The cost of the optimal string alignment is the number of
--   edit operations needed to make the input strings equal under the
--   condition that no substring is edited more than once. See also:
--   <a>http://en.wikipedia.org/wiki/Damerau-Levenshtein_distance</a>.
restrictedDamerauLevenshteinDistance :: EditCosts -> String -> String -> Int
