如何使用 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)