如何解析Haskell';是帕塞克吗?

如何解析Haskell';是帕塞克吗?,haskell,parsec,Haskell,Parsec,我是Haskell的初学者,我试图通过编写一个解析器来学习Parsec,该解析器可以使用阿拉伯数字,如“234”,也可以使用罗马数字,如“MCMLXIX”。我发现了,所以我想我应该尝试以某种方式将fromroam函数与Parsec结合使用,因为我最终需要得到与罗马数字相同的阿拉伯数字。但是我还不知道如何将fromroam的输出强制到解析器中。这就是我到目前为止所做的: import Text.Parsec import Text.Parsec.Text (Parser) import Text.

我是Haskell的初学者,我试图通过编写一个解析器来学习Parsec,该解析器可以使用阿拉伯数字,如“234”,也可以使用罗马数字,如“MCMLXIX”。我发现了,所以我想我应该尝试以某种方式将
fromroam
函数与Parsec结合使用,因为我最终需要得到与罗马数字相同的阿拉伯数字。但是我还不知道如何将
fromroam
输出强制到
解析器中。这就是我到目前为止所做的:

import Text.Parsec
import Text.Parsec.Text (Parser)
import Text.Numeral.Roman

arabicNum :: Parser Int
arabicNum = do
  n <- many1 digit
  return (read n)

isChapter :: Inline -> Bool
isChapter str = str == Str "CHAPTER"

number :: Parser Int
number = arabicNum <|> romanNum

romanNum :: Parser Int
romanNum = do
  str <- many1 char
  return case (fromRoman str) of
    Just n -> n
    Nothing -> Nothing
import Text.Parsec
导入Text.Parsec.Text(解析器)
导入Text.number.Roman
arabicNum::解析器Int
阿拉伯核=do
恩布尔
isChapter str=str==str“章”
数字::语法分析器Int
数字=阿拉伯罗马数字
语法分析器Int
romanNum=do
strn
无->无

但是,没有骰子,因为我还不知道我在做什么

如果您的
可能
,您可以
失败
生成解析器错误。如果是某物,您可以
返回它:

romanNum :: Parser Int
romanNum = do
  str <- many1 $ oneOf "MDCLXVI"
  case fromRoman str of
    Just n -> return n
    Nothing -> fail $ str ++ " is not a valid roman numeral"
romanum::Parser Int
romanNum=do
str返回n
Nothing->fail$str++“不是有效的罗马数字”