tibetan-utils 0.1.0.4 → 0.1.1.0
raw patch · 4 files changed
+17/−11 lines, 4 filesdep ~tibetan-utilsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: tibetan-utils
API changes (from Hackage documentation)
+ Text.Megaparsec.Char.Tibetan: digitCharBo :: Parser Char
- Text.Megaparsec.Lexer.Tibetan: parseNumber :: Parser Integer
+ Text.Megaparsec.Lexer.Tibetan: parseNumber :: (Integral a, MonadParsec e s m, Token s ~ Char) => m a
- Text.Megaparsec.Lexer.Tibetan: readBo :: String -> Maybe Integer
+ Text.Megaparsec.Lexer.Tibetan: readBo :: (Integral a) => String -> Maybe a
Files
- src/Text/Megaparsec/Char/Tibetan.hs +4/−0
- src/Text/Megaparsec/Lexer/Tibetan.hs +8/−7
- test/Spec.hs +3/−2
- tibetan-utils.cabal +2/−2
src/Text/Megaparsec/Char/Tibetan.hs view
@@ -7,3 +7,7 @@ -- consonantCharBo :: Parser Char consonantCharBo = oneOf ("ཨཅཆརཏཡཕཙཚཛའསདབངམགལཞཟཤཀཁཔནཐཇཉཝཧ" :: String)++-- | Parse a digit as a char. +digitCharBo :: Parser Char+digitCharBo = oneOf ("༠༡༢༣༤༥༦༧༨༩" :: String) <?> "digit char"
src/Text/Megaparsec/Lexer/Tibetan.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies #-} -- | Parser to parse Tibetan numerals module Text.Megaparsec.Lexer.Tibetan@@ -10,7 +11,7 @@ import Data.Either.Combinators import qualified Data.Text as T import Text.Megaparsec-import Text.Megaparsec.Text+import Text.Megaparsec.String import Text.Megaparsec.Prim import System.Environment @@ -18,21 +19,21 @@ -- -- > λ > readBo "༣༢༠༥" -- > 3205-readBo :: String -> Maybe Integer-readBo = rightToMaybe . (runParser parseNumber "") . T.pack+readBo :: (Integral a) => String -> Maybe a+readBo = fmap fromIntegral . rightToMaybe . (runParser (parseNumber :: Parser Integer) "") -- | Parse Tibetan numerals, returning a positive integer-parseNumber :: Parser Integer+parseNumber :: (Integral a, MonadParsec e s m, Token s ~ Char) => m a parseNumber = do digits <- reverse <$> some parseNumeral (pure . (`div` 10) $ foldr ((*10) .* (+)) 0 digits) <?> "tibetan integer" -- | Parse a single digit-parseNumeral :: Parser Integer+parseNumeral :: (Integral a, MonadParsec e s m, Token s ~ Char) => m a parseNumeral = foldr (<|>) (parseDigit '༠' 0) $ zipWith parseDigit "༠༡༢༣༤༥༦༧༨༩" (0:[1..9]) --- | Parser a given char as a given integer-parseDigit :: Char -> Integer -> Parser Integer+-- | m a given char as a given integer+parseDigit :: (Integral a, MonadParsec e s m, Token s ~ Char) => Char -> a -> m a parseDigit c i = do char c pure i
test/Spec.hs view
@@ -4,6 +4,7 @@ import Test.Hspec.Megaparsec import Text.Megaparsec.Lexer.Tibetan import Text.Megaparsec+import Text.Megaparsec.Text import TextShow.Data.Integral.Tibetan import qualified Data.Text as T @@ -11,9 +12,9 @@ main = hspec $ do describe "parseNumber" $ do it "parses Tibetan numerals as an Int" $ do- (runParser parseNumber "") tibStr `shouldParse` 6320+ (runParser (parseNumber :: Parser Integer) "") tibStr `shouldParse` 6320 it "fails when given a character that isn't a tibetan numeral" $ do- (runParser parseNumber "") `shouldFailOn` otherStr+ (runParser (parseNumber :: Parser Integer) "") `shouldFailOn` otherStr describe "showBo" $ do it "displays a positive integer using tibetan numerals" $ do showBo 15 `shouldBe` Just ("༡༥")
tibetan-utils.cabal view
@@ -1,5 +1,5 @@ name: tibetan-utils-version: 0.1.0.4+version: 0.1.1.0 cabal-version: >=1.10 build-type: Simple license: BSD3@@ -40,7 +40,7 @@ main-is: Spec.hs build-depends: base >=4.9.0.0 && <4.10,- tibetan-utils >=0.1.0.4 && <0.2,+ tibetan-utils >=0.1.1.0 && <0.2, hspec >=2.2.4 && <2.3, hspec-megaparsec >=0.2.1 && <0.3, text >=1.2.2.1 && <1.3,