Text.ParserCombinators.Parsec oneOf函数有错误

时间:2018-11-01 12:44:37

标签: haskell

ghci版本是GHCi,版本8.6.1:http://www.haskell.org/ghc/

Prelude> :m +Text.ParserCombinators.Parsec
Prelude Text.ParserCombinators.Parsec> oneOf "abcd"

<interactive>:7:1: error:
? Non type-variable argument
        in the constraint: Text.Parsec.Prim.Stream s m Char
      (Use FlexibleContexts to permit this)
    ? When checking the inferred type
        it :: forall s (m :: * -> *) u.
              Text.Parsec.Prim.Stream s m Char =>
              Text.Parsec.Prim.ParsecT s u m Char

为什么?

1 个答案:

答案 0 :(得分:2)

您不能像Parser Char那样打印oneOf "abcde"。就像打印一个需要输入文本的函数一样。无法打印功能。

(该错误是由于解析器涉及您未打开的某些扩展,但您可以忽略所得到的错误。这不是主要问题。)

要运行解析器,您需要提供源名称和输入文本,如下所示:

> import Text.ParserCombinators.Parsec
> parse (oneOf "abcde") "sourceName" "a"
Right 'a'
> parse (oneOf "abcde") "sourceName" "b"
Right 'b'
> parse (oneOf "abcde") "sourceName" "z"
Left "sourceName" (line 1, column 1):
unexpected "z"