fuzzy-0.1.0.0: Filters a list based on a fuzzy string search.

Safe HaskellSafe
LanguageHaskell2010

Text.Fuzzy

Description

Fuzzy string search in Haskell. Uses TextualMonoid to be able to run on different types of strings.

Synopsis

Documentation

data TextualMonoid s => Fuzzy t s Source

Included in the return type of match and filter. Contains the original value given, the rendered string and the matching score.

Constructors

Fuzzy 

Fields

original :: t
 
rendered :: s
 
score :: Int
 

Instances

(Eq t, Eq s, TextualMonoid s) => Eq (Fuzzy t s) Source 
(Show t, Show s, TextualMonoid s) => Show (Fuzzy t s) Source 

match Source

Arguments

:: TextualMonoid s 
=> s

Pattern.

-> t

The value containing the text to search in.

-> s

The text to add before each match.

-> s

The text to add after each match.

-> (t -> s)

The function to extract the text from the container.

-> Bool

Case sensitivity.

-> Maybe (Fuzzy t s)

The original value, rendered string and score.

Returns the rendered output and the matching score for a pattern and a text. Two examples are given below:

>>> match "fnt" "infinite" "" "" id True
Just ("infinite",3)
>>> match "hsk" ("Haskell",1995) "<" ">" fst False
Just ("<h>a<s><k>ell",5)

filter Source

Arguments

:: TextualMonoid s 
=> s

Pattern.

-> [t]

The list of values containing the text to search in.

-> s

The text to add before each match.

-> s

The text to add after each match.

-> (t -> s)

The function to extract the text from the container.

-> Bool

Case sensitivity.

-> [Fuzzy t s]

The list of results, sorted, highest score first.

The function to filter a list of values by fuzzy search on the text extracted from them.

>>> filter "ML" [("Standard ML", 1990),("OCaml",1996),("Scala",2003)] "<" ">" fst False
[Fuzzy {original = ("Standard ML",1990), rendered = "standard <m><l>", score = 4},Fuzzy {original = ("OCaml",1996), rendered = "oca<m><l>", score = 4}]

simpleFilter Source

Arguments

:: TextualMonoid s 
=> s

Pattern to look for.

-> [s]

List of texts to check.

-> [s]

The ones that match.

Return all elements of the list that have a fuzzy match against the pattern. Runs with default settings where nothing is added around the matches, as case insensitive.

>>> simpleFilter "vm" ["vim", "emacs", "virtual machine"]
["vim","virtual machine"]

test :: TextualMonoid s => s -> s -> Bool Source

Returns false if the pattern and the text do not match at all. Returns true otherwise.

>>> test "brd" "bread"
True