Skip to content

Commit 72089db

Browse files
committed
feat: jsonNumber, jsonString
1 parent cb7dee1 commit 72089db

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

lab-parser/src/Lib.hs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module Lib
44

55
import Data.Char
66
import Data.Either
7-
import Control.Applicative
7+
import Control.Applicative hiding (many)
88

99
someFunc :: IO ()
1010
someFunc = putStrLn "someFunc"
@@ -28,6 +28,18 @@ jsonBool = strToJsonBool <$> (string "true" <|> string "false")
2828
strToJsonBool "false" = JsonBool False
2929
strToJsonBool _ = undefined
3030

31+
jsonNumber :: Parser JsonValue
32+
jsonNumber = lstToInt <$> number
33+
where
34+
lstToInt nms = JsonNumber $ read $ map intToDigit nms
35+
36+
stringLiteral :: Parser [Char]
37+
stringLiteral = many $ satisfy (/= '"')
38+
39+
-- mo escape support
40+
jsonString :: Parser JsonValue
41+
jsonString = (\str -> JsonString str) <$> (char '"' *> stringLiteral <* char '"')
42+
3143
newtype Parser a = Parser { runParser :: String -> Either String (a, String) }
3244

3345
instance Functor Parser where
@@ -71,3 +83,8 @@ digit = digitToInt <$> satisfy isDigit
7183
string :: String -> Parser String
7284
string str = sequenceA $ map char str
7385

86+
many p = (:) <$> p <*> many p <|> pure []
87+
88+
many1 p = (:) <$> p <*> (many p <|> pure [])
89+
90+
number = many1 digit

0 commit comments

Comments
 (0)