character-cases 0.1.0.1 → 0.1.0.2
raw patch · 4 files changed
+86/−88 lines, 4 files
Files
- character-cases.cabal +2/−2
- src/Data/Char/Cases.hs +58/−58
- src/Data/String/Cases.hs +25/−25
- test/doctest/Main.hs +1/−3
character-cases.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 5614d4d110a1d3c8b6b1d2c616279aedf4fefc18a5bc46717901dc71da1e3306+-- hash: 8fb42b05c6e98302050fa2939fb2dc2521a5a515271a9a8597dddc2b8a88aa32 name: character-cases-version: 0.1.0.1+version: 0.1.0.2 synopsis: Exposes subspecies types of Char. And naming cases. description: e.g. meaning of [a-z], [A-Z], [0-9], PascalCase, camelCase, and snake_case. Please see https://github.com/aiya000/hs-character-cases#README.md category: Simple
src/Data/Char/Cases.hs view
@@ -290,40 +290,40 @@ -- | -- [a-zA-Z0-9_] ----- Please see 'Sneak'.-data SneakChar = SneakUnderscore -- ^ _- | SneakAlphaNum AlphaNumChar -- ^ [a-zA-Z0-9]+-- Please see 'Snake'.+data SnakeChar = SnakeUnderscore -- ^ _+ | SnakeAlphaNum AlphaNumChar -- ^ [a-zA-Z0-9] deriving (Show, Eq) -unSneakChar :: SneakChar -> Char-unSneakChar SneakUnderscore = '_'-unSneakChar (SneakAlphaNum x) = alphaNumToChar x+unSnakeChar :: SnakeChar -> Char+unSnakeChar SnakeUnderscore = '_'+unSnakeChar (SnakeAlphaNum x) = alphaNumToChar x -sneakChar :: CodeParsing m => m SneakChar-sneakChar =- SneakUnderscore <$ P.char '_' <|>- SneakAlphaNum <$> alphaNumChar+snakeChar :: CodeParsing m => m SnakeChar+snakeChar =+ SnakeUnderscore <$ P.char '_' <|>+ SnakeAlphaNum <$> alphaNumChar -charToSneak :: Char -> Maybe SneakChar-charToSneak x = P.parseMaybe sneakChar [x]+charToSnake :: Char -> Maybe SnakeChar+charToSnake x = P.parseMaybe snakeChar [x] -- | -- Extracts a Char of [a-zA-Z0-9_]. -- Also throws compile error if non [a-zA-Z0-9_] is passed. ----- >>> [sneakCharQ|x|]--- SneakAlphaNum (AlphaNumAlpha (AlphaLower X_))+-- >>> [snakeCharQ|x|]+-- SnakeAlphaNum (AlphaNumAlpha (AlphaLower X_)) ----- >>> [sneakCharQ|X|]--- SneakAlphaNum (AlphaNumAlpha (AlphaUpper X))+-- >>> [snakeCharQ|X|]+-- SnakeAlphaNum (AlphaNumAlpha (AlphaUpper X)) ----- >>> [sneakCharQ|_|]--- SneakUnderscore+-- >>> [snakeCharQ|_|]+-- SnakeUnderscore ----- >>> [sneakCharQ|9|]--- SneakAlphaNum (AlphaNumDigit D9)-sneakCharQ :: QuasiQuoter-sneakCharQ = QuasiQuoter+-- >>> [snakeCharQ|9|]+-- SnakeAlphaNum (AlphaNumDigit D9)+snakeCharQ :: QuasiQuoter+snakeCharQ = QuasiQuoter { quoteExp = expQ , quotePat = error "not supported" , quoteType = error "not supported"@@ -331,52 +331,52 @@ } where expQ :: String -> Q Exp- expQ [] = fail "sneakCharQ required a Char, but nothign is specified."+ expQ [] = fail "snakeCharQ required a Char, but nothign is specified." - expQ (x : []) = case charToSneak x of- Nothing -> fail [i|'${x}' is not a SneakChar.|]- Just SneakUnderscore ->- conE $ mkName "SneakUnderscore"- Just (SneakAlphaNum _) ->- (ConE (mkName "SneakAlphaNum") `AppE`) <$> (quoteExp alphaNumCharQ) [x]+ expQ (x : []) = case charToSnake x of+ Nothing -> fail [i|'${x}' is not a SnakeChar.|]+ Just SnakeUnderscore ->+ conE $ mkName "SnakeUnderscore"+ Just (SnakeAlphaNum _) ->+ (ConE (mkName "SnakeAlphaNum") `AppE`) <$> (quoteExp alphaNumCharQ) [x] - expQ xs@(_ : _) = fail [i|sneakCharQ required a Char, but a String is specified: ${xs}|]+ expQ xs@(_ : _) = fail [i|snakeCharQ required a Char, but a String is specified: ${xs}|] -- | -- [a-zA-Z_] ----- Please see 'Sneak'.-data SneakHeadChar = SneakHeadUnderscore- | SneakHeadAlpha AlphaChar+-- Please see 'Snake'.+data SnakeHeadChar = SnakeHeadUnderscore+ | SnakeHeadAlpha AlphaChar deriving (Show, Eq) -unSneakHeadChar :: SneakHeadChar -> Char-unSneakHeadChar SneakHeadUnderscore = '_'-unSneakHeadChar (SneakHeadAlpha x) = alphaToChar x+unSnakeHeadChar :: SnakeHeadChar -> Char+unSnakeHeadChar SnakeHeadUnderscore = '_'+unSnakeHeadChar (SnakeHeadAlpha x) = alphaToChar x -sneakHeadChar :: CodeParsing m => m SneakHeadChar-sneakHeadChar =- SneakHeadUnderscore <$ P.char '_' <|>- SneakHeadAlpha <$> alphaChar+snakeHeadChar :: CodeParsing m => m SnakeHeadChar+snakeHeadChar =+ SnakeHeadUnderscore <$ P.char '_' <|>+ SnakeHeadAlpha <$> alphaChar -charToSneakHead :: Char -> Maybe SneakHeadChar-charToSneakHead x = P.parseMaybe sneakHeadChar [x]+charToSnakeHead :: Char -> Maybe SnakeHeadChar+charToSnakeHead x = P.parseMaybe snakeHeadChar [x] -- | -- Extracts a Char of [a-zA-Z_]. -- Also throws compile error if non [a-zA-Z_] is passed. ----- >>> [sneakHeadCharQ|x|]--- SneakHeadAlpha (AlphaLower X_)+-- >>> [snakeHeadCharQ|x|]+-- SnakeHeadAlpha (AlphaLower X_) ----- >>> [sneakHeadCharQ|X|]--- SneakHeadAlpha (AlphaUpper X)+-- >>> [snakeHeadCharQ|X|]+-- SnakeHeadAlpha (AlphaUpper X) ----- >>> [sneakHeadCharQ|_|]--- SneakHeadUnderscore-sneakHeadCharQ :: QuasiQuoter-sneakHeadCharQ = QuasiQuoter+-- >>> [snakeHeadCharQ|_|]+-- SnakeHeadUnderscore+snakeHeadCharQ :: QuasiQuoter+snakeHeadCharQ = QuasiQuoter { quoteExp = expQ , quotePat = error "not supported" , quoteType = error "not supported"@@ -384,13 +384,13 @@ } where expQ :: String -> Q Exp- expQ [] = fail "sneakHeadCharQ required a Char, but nothign is specified."+ expQ [] = fail "snakeHeadCharQ required a Char, but nothign is specified." - expQ (x : []) = case charToSneakHead x of- Nothing -> fail [i|'${x}' is not a SneakHeadChar.|]- Just SneakHeadUnderscore ->- conE $ mkName "SneakHeadUnderscore"- Just (SneakHeadAlpha _) ->- (ConE (mkName "SneakHeadAlpha") `AppE`) <$> (quoteExp alphaCharQ) [x]+ expQ (x : []) = case charToSnakeHead x of+ Nothing -> fail [i|'${x}' is not a SnakeHeadChar.|]+ Just SnakeHeadUnderscore ->+ conE $ mkName "SnakeHeadUnderscore"+ Just (SnakeHeadAlpha _) ->+ (ConE (mkName "SnakeHeadAlpha") `AppE`) <$> (quoteExp alphaCharQ) [x] - expQ xs@(_ : _) = fail [i|sneakHeadCharQ required a Char, but a String is specified: ${xs}|]+ expQ xs@(_ : _) = fail [i|snakeHeadCharQ required a Char, but a String is specified: ${xs}|]
src/Data/String/Cases.hs view
@@ -144,37 +144,37 @@ pure $ ConE (mkName "Camel") `AppE` z `AppE` ListE zs --- | Non empty sneak_case names "[a-zA-Z_][a-zA-Z0-9_]*"-data Sneak = Sneak SneakHeadChar [SneakChar]+-- | Non empty snake_case names "[a-zA-Z_][a-zA-Z0-9_]*"+data Snake = Snake SnakeHeadChar [SnakeChar] deriving (Show, Eq) -instance Pretty Sneak where- pretty = String.fromString . unSneakCase+instance Pretty Snake where+ pretty = String.fromString . unSnakeCase -unSneakCase :: Sneak -> String-unSneakCase (Sneak x xs) =- unSneakHeadChar x : map unSneakChar xs+unSnakeCase :: Snake -> String+unSnakeCase (Snake x xs) =+ unSnakeHeadChar x : map unSnakeChar xs -parseSneakCase :: CodeParsing m => m Sneak-parseSneakCase =- Sneak <$>- sneakHeadChar <*>- P.many sneakChar+parseSnakeCase :: CodeParsing m => m Snake+parseSnakeCase =+ Snake <$>+ snakeHeadChar <*>+ P.many snakeChar -- | -- Simular to 'nonEmptyQ',--- but naming outsides of 'Sneak' will be rejected.+-- but naming outsides of 'Snake' will be rejected. ----- >>> [sneakQ|foo_bar|]--- Sneak (SneakHeadAlpha (AlphaLower F_)) [SneakAlphaNum (AlphaNumAlpha (AlphaLower O_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower O_)),SneakUnderscore,SneakAlphaNum (AlphaNumAlpha (AlphaLower B_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower A_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower R_))]+-- >>> [snakeQ|foo_bar|]+-- Snake (SnakeHeadAlpha (AlphaLower F_)) [SnakeAlphaNum (AlphaNumAlpha (AlphaLower O_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower O_)),SnakeUnderscore,SnakeAlphaNum (AlphaNumAlpha (AlphaLower B_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower A_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower R_))] ----- >>> [sneakQ|__constructor|]--- Sneak SneakHeadUnderscore [SneakUnderscore,SneakAlphaNum (AlphaNumAlpha (AlphaLower C_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower O_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower N_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower S_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower T_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower R_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower U_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower C_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower T_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower O_)),SneakAlphaNum (AlphaNumAlpha (AlphaLower R_))]+-- >>> [snakeQ|__constructor|]+-- Snake SnakeHeadUnderscore [SnakeUnderscore,SnakeAlphaNum (AlphaNumAlpha (AlphaLower C_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower O_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower N_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower S_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower T_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower R_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower U_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower C_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower T_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower O_)),SnakeAlphaNum (AlphaNumAlpha (AlphaLower R_))] ----- >>> [sneakQ|FOO_MEE_9|]--- Sneak (SneakHeadAlpha (AlphaUpper F)) [SneakAlphaNum (AlphaNumAlpha (AlphaUpper O)),SneakAlphaNum (AlphaNumAlpha (AlphaUpper O)),SneakUnderscore,SneakAlphaNum (AlphaNumAlpha (AlphaUpper M)),SneakAlphaNum (AlphaNumAlpha (AlphaUpper E)),SneakAlphaNum (AlphaNumAlpha (AlphaUpper E)),SneakUnderscore,SneakAlphaNum (AlphaNumDigit D9)]-sneakQ :: QuasiQuoter-sneakQ = QuasiQuoter+-- >>> [snakeQ|FOO_MEE_9|]+-- Snake (SnakeHeadAlpha (AlphaUpper F)) [SnakeAlphaNum (AlphaNumAlpha (AlphaUpper O)),SnakeAlphaNum (AlphaNumAlpha (AlphaUpper O)),SnakeUnderscore,SnakeAlphaNum (AlphaNumAlpha (AlphaUpper M)),SnakeAlphaNum (AlphaNumAlpha (AlphaUpper E)),SnakeAlphaNum (AlphaNumAlpha (AlphaUpper E)),SnakeUnderscore,SnakeAlphaNum (AlphaNumDigit D9)]+snakeQ :: QuasiQuoter+snakeQ = QuasiQuoter { quoteExp = expQ , quotePat = error "not supported" , quoteType = error "not supported"@@ -182,11 +182,11 @@ } where expQ :: String -> Q Exp- expQ [] = fail "sneakQ required a non empty string, but the empty string is specified."+ expQ [] = fail "snakeQ required a non empty string, but the empty string is specified." expQ (x : xs) = do- z <- (quoteExp sneakHeadCharQ) [x]- zs <- mapM (quoteExp sneakCharQ) $ map (: []) xs- pure $ ConE (mkName "Sneak") `AppE` z `AppE` ListE zs+ z <- (quoteExp snakeHeadCharQ) [x]+ zs <- mapM (quoteExp snakeCharQ) $ map (: []) xs+ pure $ ConE (mkName "Snake") `AppE` z `AppE` ListE zs -- | Non empty "veryflatten" names [a-z]+
test/doctest/Main.hs view
@@ -13,8 +13,7 @@ ghcExtensions :: [String] ghcExtensions =- [ "-XAutoDeriveTypeable"- , "-XBangPatterns"+ [ "-XBangPatterns" , "-XBinaryLiterals" , "-XConstraintKinds" , "-XDataKinds"@@ -36,7 +35,6 @@ , "-XInstanceSigs" , "-XKindSignatures" , "-XLambdaCase"- , "-XMonadFailDesugaring" , "-XMultiParamTypeClasses" , "-XMultiWayIf" , "-XNamedFieldPuns"