git.iko.soy/typeable/inflections-hs
on master help sign in
Make collection type for acronyms polymorphic
477a36dmrkkrp
CHANGELOG.md+3
@@ -9,6 +9,9 @@
9
9
10* Renamed `defaultMap` to `defaultTransliterations`.
10* Renamed `defaultMap` to `defaultTransliterations`.
11
11
12+* `parseCamelCase` and `parseSnakeCase` take any instance of `Foldable` as a
13+ collection of acronyms, not just lists.
14+
12* Added the `CHANGELOG.md` file.
15* Added the `CHANGELOG.md` file.
13
16
14* Switched test suite to Hspec.
17* Switched test suite to Hspec.
Text/Inflections/Parse/CamelCase.hs+9−5
@@ -26,6 +26,8 @@ import qualified Data.Text as T
26
26
27#if MIN_VERSION_base(4,8,0)
27#if MIN_VERSION_base(4,8,0)
28import Prelude hiding (Word)
28import Prelude hiding (Word)
29+#else
30+import Data.Foldable
29#endif
31#endif
30
32
31-- | Parse a CamelCase string.
33-- | Parse a CamelCase string.
@@ -38,21 +40,23 @@ import Prelude hiding (Word)
38-- 1:4:
40-- 1:4:
39-- unexpected '_'
41-- unexpected '_'
40-- expecting end of input, lowercase letter, or uppercase letter
42-- expecting end of input, lowercase letter, or uppercase letter
41−parseCamelCase
43+parseCamelCase :: (Foldable f, Functor f)
42− :: [Word 'Acronym] -- ^ Collection of acronyms
44+ => f (Word 'Acronym) -- ^ Collection of acronyms
43 -> Text -- ^ Input
45 -> Text -- ^ Input
44 -> Either (ParseError Char Dec) [SomeWord] -- ^ Result of parsing
46 -> Either (ParseError Char Dec) [SomeWord] -- ^ Result of parsing
45parseCamelCase acronyms = parse (parser acronyms) ""
47parseCamelCase acronyms = parse (parser acronyms) ""
46
48
47−parser
49+parser :: (Foldable f, Functor f)
48− :: [Word 'Acronym] -- ^ Collection of acronyms
50+ => f (Word 'Acronym) -- ^ Collection of acronyms
49 -> Parser [SomeWord] -- ^ CamelCase parser
51 -> Parser [SomeWord] -- ^ CamelCase parser
50parser acronyms = many (a <|> n) <* eof
52parser acronyms = many (a <|> n) <* eof
51 where
53 where
52 n = SomeWord <$> word
54 n = SomeWord <$> word
53 a = SomeWord <$> acronym acronyms
55 a = SomeWord <$> acronym acronyms
54
56
57+acronym :: (Foldable f, Functor f)
58+ => f (Word 'Acronym)
55−acronym :: [Word 'Acronym] -> Parser (Word 'Acronym)
59+ -> Parser (Word 'Acronym)
56acronym acronyms = do
60acronym acronyms = do
57 x <- T.pack <$> choice (string . T.unpack . unWord <$> acronyms)
61 x <- T.pack <$> choice (string . T.unpack . unWord <$> acronyms)
58 case mkAcronym x of
62 case mkAcronym x of
Text/Inflections/Parse/SnakeCase.hs+9−5
@@ -25,6 +25,8 @@ import qualified Data.Text as T
25
25
26#if MIN_VERSION_base(4,8,0)
26#if MIN_VERSION_base(4,8,0)
27import Prelude hiding (Word)
27import Prelude hiding (Word)
28+#else
29+import Data.Foldable
28#endif
30#endif
29
31
30-- | Parse a snake_case string.
32-- | Parse a snake_case string.
@@ -37,21 +39,23 @@ import Prelude hiding (Word)
37-- 1:4:
39-- 1:4:
38-- unexpected 'B'
40-- unexpected 'B'
39-- expecting '_', end of input, or lowercase letter
41-- expecting '_', end of input, or lowercase letter
40−parseSnakeCase
42+parseSnakeCase :: (Foldable f, Functor f)
41− :: [Word 'Acronym] -- ^ Collection of acronyms
43+ => f (Word 'Acronym) -- ^ Collection of acronyms
42 -> Text -- ^ Input
44 -> Text -- ^ Input
43 -> Either (ParseError Char Dec) [SomeWord] -- ^ Result of parsing
45 -> Either (ParseError Char Dec) [SomeWord] -- ^ Result of parsing
44parseSnakeCase acronyms = parse (parser acronyms) ""
46parseSnakeCase acronyms = parse (parser acronyms) ""
45
47
46−parser
48+parser :: (Foldable f, Functor f)
47− :: [Word 'Acronym]
49+ => f (Word 'Acronym)
48 -> Parser [SomeWord]
50 -> Parser [SomeWord]
49parser acronyms = ((a <|> n) `sepBy` char '_') <* eof
51parser acronyms = ((a <|> n) `sepBy` char '_') <* eof
50 where
52 where
51 n = SomeWord <$> word
53 n = SomeWord <$> word
52 a = SomeWord <$> acronym acronyms
54 a = SomeWord <$> acronym acronyms
53
55
56+acronym :: (Foldable f, Functor f)
57+ => f (Word 'Acronym)
54−acronym :: [Word 'Acronym] -> Parser (Word 'Acronym)
58+ -> Parser (Word 'Acronym)
55acronym acronyms = do
59acronym acronyms = do
56 x <- T.pack <$> choice (string . T.unpack . unWord <$> acronyms)
60 x <- T.pack <$> choice (string . T.unpack . unWord <$> acronyms)
57 case mkAcronym x of
61 case mkAcronym x of