git.iko.soy/typeable/inflections-hs
on master help sign in
Make collection type for acronyms polymorphic
commit477a36de5cfbfe933d3a0d8177213bf3a41c4ace authormrkkrp <markkarpov@opmbx.org> dateWed 21 Dec 2016, 17:38 (10 years ago) parent0a43bc0
3 files changed+21−10
CHANGELOG.md+3 Text/Inflections/Parse/CamelCase.hs+9−5 Text/Inflections/Parse/SnakeCase.hs+9−5
CHANGELOG.md+3
@@ -9,6 +9,9 @@
99
1010* Renamed `defaultMap` to `defaultTransliterations`.
1111
12+* `parseCamelCase` and `parseSnakeCase` take any instance of `Foldable` as a
13+ collection of acronyms, not just lists.
14+
1215* Added the `CHANGELOG.md` file.
1316
1417* Switched test suite to Hspec.
Text/Inflections/Parse/CamelCase.hs+9−5
@@ -26,6 +26,8 @@ import qualified Data.Text as T
2626
2727#if MIN_VERSION_base(4,8,0)
2828import Prelude hiding (Word)
29+#else
30+import Data.Foldable
2931#endif
3032
3133-- | Parse a CamelCase string.
@@ -38,21 +40,23 @@ import Prelude hiding (Word)
3840-- 1:4:
3941-- unexpected '_'
4042-- expecting end of input, lowercase letter, or uppercase letter
41−parseCamelCase
42− :: [Word 'Acronym] -- ^ Collection of acronyms
43+parseCamelCase :: (Foldable f, Functor f)
44+ => f (Word 'Acronym) -- ^ Collection of acronyms
4345 -> Text -- ^ Input
4446 -> Either (ParseError Char Dec) [SomeWord] -- ^ Result of parsing
4547parseCamelCase acronyms = parse (parser acronyms) ""
4648
47−parser
48− :: [Word 'Acronym] -- ^ Collection of acronyms
49+parser :: (Foldable f, Functor f)
50+ => f (Word 'Acronym) -- ^ Collection of acronyms
4951 -> Parser [SomeWord] -- ^ CamelCase parser
5052parser acronyms = many (a <|> n) <* eof
5153 where
5254 n = SomeWord <$> word
5355 a = SomeWord <$> acronym acronyms
5456
55−acronym :: [Word 'Acronym] -> Parser (Word 'Acronym)
57+acronym :: (Foldable f, Functor f)
58+ => f (Word 'Acronym)
59+ -> Parser (Word 'Acronym)
5660acronym acronyms = do
5761 x <- T.pack <$> choice (string . T.unpack . unWord <$> acronyms)
5862 case mkAcronym x of
Text/Inflections/Parse/SnakeCase.hs+9−5
@@ -25,6 +25,8 @@ import qualified Data.Text as T
2525
2626#if MIN_VERSION_base(4,8,0)
2727import Prelude hiding (Word)
28+#else
29+import Data.Foldable
2830#endif
2931
3032-- | Parse a snake_case string.
@@ -37,21 +39,23 @@ import Prelude hiding (Word)
3739-- 1:4:
3840-- unexpected 'B'
3941-- expecting '_', end of input, or lowercase letter
40−parseSnakeCase
41− :: [Word 'Acronym] -- ^ Collection of acronyms
42+parseSnakeCase :: (Foldable f, Functor f)
43+ => f (Word 'Acronym) -- ^ Collection of acronyms
4244 -> Text -- ^ Input
4345 -> Either (ParseError Char Dec) [SomeWord] -- ^ Result of parsing
4446parseSnakeCase acronyms = parse (parser acronyms) ""
4547
46−parser
47− :: [Word 'Acronym]
48+parser :: (Foldable f, Functor f)
49+ => f (Word 'Acronym)
4850 -> Parser [SomeWord]
4951parser acronyms = ((a <|> n) `sepBy` char '_') <* eof
5052 where
5153 n = SomeWord <$> word
5254 a = SomeWord <$> acronym acronyms
5355
54−acronym :: [Word 'Acronym] -> Parser (Word 'Acronym)
56+acronym :: (Foldable f, Functor f)
57+ => f (Word 'Acronym)
58+ -> Parser (Word 'Acronym)
5559acronym acronyms = do
5660 x <- T.pack <$> choice (string . T.unpack . unWord <$> acronyms)
5761 case mkAcronym x of