Skip to content

tippenein/countable-inflections

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ad76172 · Feb 25, 2021

History

24 Commits
Apr 24, 2018
Apr 9, 2017
Dec 22, 2020
Oct 4, 2016
Mar 8, 2018
Oct 4, 2016
Feb 25, 2021
Oct 4, 2016
Dec 21, 2020
Dec 22, 2020
Dec 21, 2020
Dec 21, 2020

Repository files navigation

Countable Inflections

License MIT Hackage Stackage LTS

This library implements pluralization and singularization in a similar way to the rails inflectors

It uses regexes to define the non-standard transformations and therefore doesn't provide much safety. If you need to provide the same pluralization and singularization which rails does out of the box, this will work the same. If you want more you should be using inflections-hs which uses megaparsec to give you more guarantees

Usage

λ: pluralize "person"
"people"

λ: singularize "branches"
"branch"

These can also be given custom inflection matchers

λ: :t singularizeWith
[Inflection] -> Text -> Text

There are 3 different types of transformations:

Match

Takes a PCRE regex and a replacement string.

λ: :t makeMatchMapping
[(RegexPattern, RegexReplace)] -> [Inflection]

λ: let mapping = makeMatchMapping [("(octop)us", "\\1i")]
λ: pluralizeWith mapping "octopus"
"octopi"

Irregular

From singular to plural with no greater pattern.

λ: :t makeIrregularMapping
[(Singular, Plural)] -> [Inflection]

λ: let mapping = makeIrregularMapping [("zombie","zombies")]
λ: pluralizeWith mapping "zombie"
"zombies"

Uncountable

Doesn't have a mapping, word stays the same) so it has the type:

[Text] -> [Inflection]

Inflect

In general you can input a number and singularize or pluralize based on the count, for example:

setReport = do
  sets <- getSets
  n <- length sets
  print $ show n ++ " " ++ inflect "sets" n

This way it'll list as "1 set" or "5 sets" based on the input.

License

MIT - see the LICENSE file.