首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parsec3被parsec阻塞了,我做了什么

Parsec3被parsec阻塞了,我做了什么
EN

Stack Overflow用户
提问于 2016-06-01 19:09:07
回答 2查看 247关注 0票数 1

使用如下所示的阴谋文件(相关库部分):

编译依赖: 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时得到了这样的信息:

代码语言:javascript
复制
...
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解析器?我在文件中使用的导入是:

代码语言:javascript
复制
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的文本解析功能,这也是我研究这个问题的原因。

弗雷德里克

编辑:

好的,把这个问题降到一个最小的形式,这突出了真正的问题。使用此代码:

代码语言:javascript
复制
import Text.Parsec.Text
import Text.Parsec
import Text.Parsec.Number

num:: Bool -> Parser Double
num = floating2

以及不依赖于所使用的特定构建工具的评估过程。

代码语言:javascript
复制
> 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是一个包,也就是说,而不是在本例中创建了问题:

代码语言:javascript
复制
>  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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-02 09:33:42

在用于.cabal的parsec3-numbers文件中有:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2016-06-01 20:16:50

FWIW,我能够使用堆栈解析器lts-5.13和lts-6.0满足您的所有约束。

我觉得你的分号有问题。我会尝试使用一个阴谋沙箱和/或使用stack

如果使用stack,只需将这些内容添加到stack.yaml文件中的extra-deps:部分:

代码语言:javascript
复制
extra-deps:
- parsec3-numbers-0.1.0
- parsec3-1.0.1.8
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37576910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档