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个问题上。可以吗?如果不行,我会立即删除它。没问题。如果你认为它对其他人有用,分享它。