1
这是来自在线课程的任务。我已经坐了两天了。请给出一些解释或提示来解决它。自制“Many1”解析器
这里的类型
newtype Prs a = Prs { runPrs :: String -> Maybe (a, String) }
我需要实现many1
解析器。这是它应该如何工作
> runPrs (many1 $ char 'A') "AAABCDE"
Just ("AAA","BCDE")
> runPrs (many1 $ char 'A') "BCDE"
Nothing
我有解析器many
实现这样的
many p = (:) <$> p <*> many p <|> pure []
下面是前面的例子输出。
*Main> test9
Just ("AAA","BCDE")
*Main> test10
Just ("","BCDE")
注意最后的结果,它返回空字符串,但many1
应该返回Nothing
。我不知道如何改变many
的代码来使得像many1
这样的工作。我不能想象如何停止第一个不正确的符号。
谢谢你,它适用于例如案件,现在我的想法。但不幸的是,它在其他一些测试中的分级系统上失败了。 – StalkAlex
它的工作原理,再次感谢伟大的解释! – StalkAlex