@hackage countable-inflections0.3.2
Countable Text Inflections
Categories
License
MIT
Maintainer
Brady Ouren <brady.ouren@gmail.com>
Links
Versions
Installation
Dependencies (6)
- base >=4.8 && <5
- bytestring
- exceptions
- pcre-utils
- regex-pcre-builtin
- text Show all…
Dependents (5)
@hackage/ihp-graphql, @hackage/ihp, @hackage/acme-everything, @hackage/ihp-ide, @hackage/ihp-schema-compiler
Package Flags
dev
(off by default)
Turn on development settings.
Countable Inflections
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.