我正在研究一些秒差距代码。在脚本的底部,有一个 parseFromFile 调用,其中 ParseFromFile 来自 Text.Parsec.String
parseFromFile parserCode inFile
如果我将此注释掉,我的代码将不再编译,并且会出现许多模棱两可的类型错误:
DeleteMe.hs:47:18-23: No instance for (Stream s0 Data.Functor.Identity.Identity Char) …
arising from a use of ‘noneOf’
The type variable ‘s0’ is ambiguous
Relevant bindings include
parseSeq :: ParsecT s0 u Data.Functor.Identity.Identity [Char]...
在流的严格形式和惰性形式之间存在歧义:
Note: there are several potential instances:
instance Monad m =>
Stream Data.ByteString.Internal.ByteString m Char
-- Defined in ‘Text.Parsec.Prim’
instance Monad m =>
Stream Data.ByteString.Lazy.Internal.ByteString m Char
-- Defined in ‘Text.Parsec.Prim’
instance Monad m => Stream Text m Char
-- Defined in ‘Text.Parsec.Prim’
parseFromFile 必须消除类型推断的歧义。解决这种歧义的正确方法是什么?包括 parseFromFile 调用将使它编译,但我不想为了这个目的而必须调用它。我可以键入注释所有组合器代码,但这很乱。