如何使用 parsec (Haskell) 来验证可选选项生成的输入?
How can I make an if using parsec (Haskell) to verify the input generated by an optional choice?
我有这个代数数据类型:
data Arithmetic = Sum Int Int | Mult Int Int
deriving (Show)
我想这样做:
parseArith :: Parser Arithmetic
parseArith = do
a <- many1 digit
spaces
string "+" <|> string "*"
spaces
b <- many1 digit
...
在“...”的哪个位置,我会验证它是否有“+”或“*”,有人可以帮助我吗?
尝试
...
op <- string "+" <|> string "*"
spaces
b <- many1 digit
... check op here
https://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec-Char.html#v:string 的文档与您的用例相同。
作为 Franky 答案的一个小替代方案,选择 return 您稍后需要的构造函数。
parseArith :: Parser Arithmetic
parseArith = do
a <- many1 digit
spaces
op <- (string "+" >> return Sum)
<|> (string "*" >> return Mult)
spaces
b <- many1 digit
spaces
return $ op (read a) (read b)
我有这个代数数据类型:
data Arithmetic = Sum Int Int | Mult Int Int
deriving (Show)
我想这样做:
parseArith :: Parser Arithmetic
parseArith = do
a <- many1 digit
spaces
string "+" <|> string "*"
spaces
b <- many1 digit
...
在“...”的哪个位置,我会验证它是否有“+”或“*”,有人可以帮助我吗?
尝试
...
op <- string "+" <|> string "*"
spaces
b <- many1 digit
... check op here
https://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec-Char.html#v:string 的文档与您的用例相同。
作为 Franky 答案的一个小替代方案,选择 return 您稍后需要的构造函数。
parseArith :: Parser Arithmetic
parseArith = do
a <- many1 digit
spaces
op <- (string "+" >> return Sum)
<|> (string "*" >> return Mult)
spaces
b <- many1 digit
spaces
return $ op (read a) (read b)