Parsing 具有歧义类型的parsec错误

Parsing 具有歧义类型的parsec错误,parsing,haskell,parsec,Parsing,Haskell,Parsec,我正在使用haskell编写wiki解析器,我遇到了这个wierd问题。我现在的代码如下所示 import System.Environment import Control.Applicative hiding ((<|>), many) import Control.Monad import Text.Parsec import Text.Parsec.String import Text.Parsec.ByteString.Lazy data RichText = UTex

我正在使用haskell编写wiki解析器,我遇到了这个wierd问题。我现在的代码如下所示

import System.Environment
import Control.Applicative hiding ((<|>), many)

import Control.Monad
import Text.Parsec
import Text.Parsec.String
import Text.Parsec.ByteString.Lazy

data RichText = UText String
              | DText String
              deriving (Show)

parseBold = do
  string "\'\'\'"
  manyTill anyChar (try (string "\'\'\'"))

parseItalic = do
  string "\'\'"
  manyTill anyChar (try (string "\'\'"))

parsefunc content = do
  case (parse parseItalic "parsing" content) of
    Right result -> return result
    Left error -> return "some error!"

main = do
  content:_ <- getArgs
  result <- parsefunc content
  print result

我无法理解这个错误是什么。显然,我的类型是一个字符串(只不过是[Char]),但为什么编译器会抱怨它是Char?

有一个歧义错误

解析器的类型可以是
Text.Parsec.String.Parser
Text.Parsec.ByteString.Lazy.Parser
,编译器不知道选择哪个

如果添加类型,则可以获得要编译的代码

parseBold::Text.Parsec.ByteString.Lazy.Parser String
parseBold = do
....etc
还有其他方法可以解决这种歧义


您可以在推断类型的其他地方使用
parseBold
/
parseItalic
,或者您可以清理导入,以便只允许一种情况。

您已经导入了这两种情况

import Text.Parsec.String
import Text.Parsec.ByteString.Lazy
前者解析“Stream Char”,后者解析“Stream Word8”。因此,您必须通过testring.Lazy去掉
,只留下一个变体。如果两者都需要(例如,您打算使用多态函数解析ByteString和String),则必须显式地对流进行参数化

import Text.Parsec.String
import Text.Parsec.ByteString.Lazy