Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

Fuzzy string search in Haskell.
Uses `TextualMonoid`

to be able to run on different types of strings.

- data TextualMonoid s => Fuzzy t s = Fuzzy {}
- match :: TextualMonoid s => s -> t -> s -> s -> (t -> s) -> Bool -> Maybe (Fuzzy t s)
- filter :: TextualMonoid s => s -> [t] -> s -> s -> (t -> s) -> Bool -> [Fuzzy t s]
- simpleFilter :: TextualMonoid s => s -> [s] -> [s]
- test :: TextualMonoid s => s -> s -> Bool

# Documentation

data TextualMonoid s => Fuzzy t s Source

:: 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:

`>>>`

Just ("infinite",3)`match "fnt" "infinite" "" "" id True`

`>>>`

Just ("<h>a<s><k>ell",5)`match "hsk" ("Haskell",1995) "<" ">" fst False`

:: 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.

`>>>`

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

:: 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.

`>>>`

["vim","virtual machine"]`simpleFilter "vm" ["vim", "emacs", "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.

`>>>`

True`test "brd" "bread"`