使用如下所示的阴谋文件(相关库部分):
编译依赖: base >=4.8 & 1.2;4.9,filepath >=1.4 &1.2;1.5,time >=1.5 &1.2;1.6,bytestring >=0.10 && 1.2;0.11,unix >=2.7 &1.2;2.8,密码散列>=0.11 &1.2;0.12,process >=1.2 &1.2;1.3,变压器>= 0.4和< 0.5,文本>= 1.2 && <= 1.3,base 16-字节串>= 0.1.1和&1.2;1.1.2,utf8 8-string >= 1&0.2;1.1,目录>=1.2 &0.2;1.3,regex-base >= 0.9 &0.2;1.0,regex-pcre >= 0.94 &0.2;0.95,regex-base >= 0.93 && 0.2;0.94,直接sqlite >=2.3 &0.2;2.4,文本>=1.2 &0.2;1.3,filemanip >=0.3 &0.2;0.4, parsec3 -numbers >=0.1 &0.2;0.2,parsec3 >=1.0 && 0.2;1.1
我在做cabal build时得到了这样的信息:
...
Couldn't match expected type ‘ParsecT
Text () Data.Functor.Identity.Identity Double’
with actual type ‘parsec-3.1.9:Text.Parsec.Prim.ParsecT
s0 u0 m0 Double’
NB: ‘ParsecT’
is defined in ‘Text.Parsec.Prim’ in package ‘parsec3-1.0.1.8’
‘parsec-3.1.9:Text.Parsec.Prim.ParsecT’
is defined in ‘Text.Parsec.Prim’ in package ‘parsec-3.1.9’
In a stmt of a 'do' block: time <- floating我想要做的是在floating2包中使用parsec3-numbers解析器,但不知何故,我也受到了parsec-3.1.9的干扰。如果我将失败的文件加载到ghci中,并使用:set -hide-package parsec或:set -hide-package parsec-numbers设置,我就会遇到同样的问题。
如何确保只获得parsec3解析器?我在文件中使用的导入是:
import Text.Parsec.Text
import Text.Parsec
import Text.Parsec.Number
import qualified Data.List as DL
import qualified Data.Text.IO as TIO
import Database.SQLite3
import Data.Text所以这个应该能行。我需要parsec3的文本解析功能,这也是我研究这个问题的原因。
弗雷德里克
编辑:
好的,把这个问题降到一个最小的形式,这突出了真正的问题。使用此代码:
import Text.Parsec.Text
import Text.Parsec
import Text.Parsec.Number
num:: Bool -> Parser Double
num = floating2以及不依赖于所使用的特定构建工具的评估过程。
> cd ~ # Move outside of any cabal package
> ghci -hide-package parsec # Parsec should now not be pulled in
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
Prelude> :l test.hs
[1 of 1] Compiling Main ( test.hs, interpreted )
test.hs:6:7:
Couldn't match type ‘parsec-3.1.9:Text.Parsec.Prim.ParsecT
s0 u0 m0 Double’
with ‘ParsecT
Data.Text.Internal.Text () Data.Functor.Identity.Identity Double’
NB: ‘parsec-3.1.9:Text.Parsec.Prim.ParsecT’
is defined in ‘Text.Parsec.Prim’ in package ‘parsec-3.1.9’
‘ParsecT’
is defined in ‘Text.Parsec.Prim’ in package ‘parsec3-1.0.1.8’
Expected type: Parser a -> Parser Double
Actual type: Bool
-> parsec-3.1.9:Text.Parsec.Prim.ParsecT s0 u0 m0 Double
In the expression: floating2
In an equation for ‘num’: num = floating2
Failed, modules loaded: none.正如您所看到的,parsec-3.1.9仍然被牵扯进来,并且正在“阻塞”parsec3定义。
为了在这里提供一个干净的例子,parsec-numbers是一个包,也就是说,而不是在本例中创建了问题:
> ghci -hide-package parsec-numbers
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
<command line>: cannot satisfy -hide-package parsec-numbers
(use -v for more information)发布于 2016-06-02 09:33:42
在用于.cabal的parsec3-numbers文件中有:
flag parsec3
Description: Use parsec3
Default: False
Library
exposed-modules:
Text.Parsec.Number
if flag(parsec3)
build-depends: parsec3
else
build-depends: parsec因此,我敢打赌,您希望使用parsec3-numbers选项构建-f parsec3。
发布于 2016-06-01 20:16:50
FWIW,我能够使用堆栈解析器lts-5.13和lts-6.0满足您的所有约束。
我觉得你的分号有问题。我会尝试使用一个阴谋沙箱和/或使用stack。
如果使用stack,只需将这些内容添加到stack.yaml文件中的extra-deps:部分:
extra-deps:
- parsec3-numbers-0.1.0
- parsec3-1.0.1.8https://stackoverflow.com/questions/37576910
复制相似问题