Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing Haskell Parsec,将其中一个改编为[字符串]_Parsing_Haskell_Parsec - Fatal编程技术网

Parsing Haskell Parsec,将其中一个改编为[字符串]

Parsing Haskell Parsec,将其中一个改编为[字符串],parsing,haskell,parsec,Parsing,Haskell,Parsec,我正在学习48小时内为自己写一个计划的教程 symbol :: Parser Char symbol = oneOf "!#$%&|*+-/:<=>?@^_~" 或者我应该导入Text.Parsec.Char并尝试在关键字列表上映射字符串吗 我正在尝试标记化,只是想知道其他人在这条道路上的最佳实践是什么 医生说要使用这样的东西: divOrMod = string "div" <|> string "mod" di

我正在学习48小时内为自己写一个计划的教程

 symbol :: Parser Char
 symbol = oneOf "!#$%&|*+-/:<=>?@^_~"
或者我应该导入Text.Parsec.Char并尝试在关键字列表上映射字符串吗

我正在尝试标记化,只是想知道其他人在这条道路上的最佳实践是什么

医生说要使用这样的东西:

 divOrMod    =   string "div" 
              <|> string "mod"
divOrMod=字符串“div”
字符串“mod”

此项的一般形式为,具有以下类型:

choice :: Stream s m t => [ParsecT s u m a] -> ParsecT s u m a
基本上,您给它一个解析器列表,然后它按顺序尝试它们,直到一个成功<代码>选择是使用
()
实现的,因此它与该方法相同

在您的情况下,要匹配关键字列表而不匹配其他解析器,只需将
string
映射到
string
s列表上,然后使用
choice


另一方面,
mapmstring
会做一些完全不同的事情——它希望所有的解析器按顺序成功。

keys=[“class”,“constructor”…]关键词=选择$map字符串键。我使用的是更新版本的Parsec吗?没有因使用“string”而产生的(Text.Parsec.Prim.Stream s0 m0 Char)实例@Dave:尝试给它一个显式类型签名。@Dave:这是实际操作中的“可怕的单态限制”。如果愿意,可以将
{-#语言NoMonomorphismRestriction#-}
放在文件的顶部。这可以在编写解析器时节省一些麻烦。嘿,我对那个教程有一些问题。。。如果你不介意的话,我可以问你吗?
choice :: Stream s m t => [ParsecT s u m a] -> ParsecT s u m a