- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名 Haskell 初学者,我正在尝试通过编写一个解析器来了解 Parsec,该解析器可以使用阿拉伯数字(如“234”)或罗马数字(如“MCMLXIX”)。我发现the library roman-numerals ,所以我想我会尝试以某种方式与 Parsec 结合使用 fromRoman
函数,因为我最终需要获得罗马数字的阿拉伯数字。但我还不知道如何将 fromRoman
的 Maybe
输出强制转换为 Parser
。这是我到目前为止所拥有的:
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
但是,没有骰子,因为我还不知道我在做什么。
最佳答案
如果您的Maybe
是Nothing
,您可能无法
生成解析器错误。如果有问题,您可以返回
:
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"
关于haskell - 如何解析 Haskell 秒差距中的罗马数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59887426/
Parsec 的解析模式“(some_input)”输入返回解析后的数据(如我在pattern中指定的那样。 如何知道它消耗了多少输入(该模式未使用 eof 锚定)?我不想通过所有模式的内部添加长度跟
我正在尝试解析 F# 类型语法。我开始编写 [F]Parsec 语法并遇到问题,所以我简化了 the grammar归结为: type ::= identifier | type -> type id
我将 Parsec 与自定义 Stream 类型结合使用。该流本质上是String,但有时它将在字符串中找到的输入扩展为其他字符串(想想别名扩展)。例如,给定“§4.1 ¶3”,它可能会将“Secti
我这里有一些代码可用于将 URI 路径解析为字符串列表。例如,/user/home 将变为 ["user", "home"]。 pathPiece :: Parser String pathPie
我有以下代码在页面加载时将主题更改为深色。问题是有 1 秒的间隔,每次我切换到其他页面时,屏幕都会闪烁 1 秒然后变黑。我如何替换 document.body.setAttribute('data-t
我是 Haskell 和 Parsec 的新手。看完Chapter 16 Using Parsec of Real World Haskell ,一个问题出现在我的脑海中:为什么以及什么时候 Pars
我是一名优秀的程序员,十分优秀!