Haskell can';在GHCi中找不到Parsec模块
我一直在研究这个问题。问题是从给定字符串构造树:Haskell can';在GHCi中找不到Parsec模块,haskell,Haskell,我一直在研究这个问题。问题是从给定字符串构造树:“x(y,a(,b))”=>分支“x”(分支“y”为空)(分支“a”为空(分支“b”为空)) 使用Parsec的一种解决方案如下: import Text.Parsec.String import Text.Parsec hiding (Empty) pTree :: Parser (Tree Char) pTree = do pBranch <|> pEmpty pBranch = do a <- letter
“x(y,a(,b))”=>分支“x”(分支“y”为空)(分支“a”为空(分支“b”为空))
使用
Parsec
的一种解决方案如下:
import Text.Parsec.String
import Text.Parsec hiding (Empty)
pTree :: Parser (Tree Char)
pTree = do
pBranch <|> pEmpty
pBranch = do
a <- letter
char '('
t0 <- pTree
char ','
t1 <- pTree
char ')'
return $ Branch a t0 t1
pEmpty =
return Empty
stringToTree str =
case parse pTree "" str of
Right t -> t
Left e -> error (show e)
import Text.Parsec.String
导入文本.Parsec隐藏(空)
pTree::解析器(树字符)
pTree=do
彭普蒂牧场酒店
pBranch=do
Parsec
位于Text.parsercompbinators.Parsec
下,而不是Text.Parsec
Text.Parsec
和Text.Parsec.String
是从版本3开始的包中的模块。使用传统名称Text.parsercompbinators.parsec.
的兼容模块提供了旧的parsec-2
接口,但没有*.String
模块,这是parsec-3
中的新模块。如果您已经安装了parsec-2
或根本没有安装parsec
,我建议使用规范的cabal安装parsec
安装parsec-3
编辑:
如果您想为树解析一个不那么严格的语法,支持示例输入
pBranch = do
a <- letter
do char '('
t0 <- pTree
char ','
t1 <- pTree
char ')'
return $ Branch a t0 t1
<|> return (Branch a Empty Empty)
pBranch=do
一个thx,安装了parsec-3后就可以编译了。但是,现在运行时会出现意外的“,”期望的“(“
异常。给定的解析器无法解析输入“x(y,a(,b)),这需要严格的格式“x(y(,),a(,b(,))”再次为那棵树。thx,我把你的解决方案贴在Haskell的99个问题上。可以吗?如果不行,我会立即删除它。没问题。如果你认为它对其他人有用,分享它。