Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Cabal项目似乎正在导入Cabal Library breaking Setup.hs的多个版本_Haskell_Cabal - Fatal编程技术网

Haskell Cabal项目似乎正在导入Cabal Library breaking Setup.hs的多个版本

Haskell Cabal项目似乎正在导入Cabal Library breaking Setup.hs的多个版本,haskell,cabal,Haskell,Cabal,简称: 我有一个阴谋集团项目,它依赖于使用阴谋集团沙盒添加源代码构建的库。此库导出预处理器函数BuildInfo->LocalBuildInfo->preprocessor。当我尝试在Setup.hs中为我的主要cabal项目使用该预处理器时,我得到错误: Couldn't match type ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’ with ‘BuildInfo’ NB: ‘Cabal-

简称:

我有一个阴谋集团项目,它依赖于使用阴谋集团沙盒添加源代码构建的库。此库导出预处理器函数BuildInfo->LocalBuildInfo->preprocessor。当我尝试在Setup.hs中为我的主要cabal项目使用该预处理器时,我得到错误:

Couldn't match type ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
              with ‘BuildInfo’
NB: ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.18.1.3’
    ‘BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.20.0.1’
Couldn't match type ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
              with ‘BuildInfo’
NB: ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.18.1.3’
    ‘BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.20.0.1’
不那么短:

我目前在我的阴谋集团沙箱中有以下目录结构:

├── main.cabal
├── Setup.hs
├── Main.hs
├── lib
│   ├── myPP.cabal
│   ├── MyPP.hs
│   └── myPP
│       ├── MyPP.hs
│       ├── myPP.cabal
我的主程序包有一个myPP,它有一个构建。myPP是一个库,myPP作为公开模块,Cabal和ghc作为依赖项。MyPP模块导出一个函数

myPP :: BuildInfo -> LocalBuildInfo -> PreProcessor
然后我就跑

cabal sandbox add-source ./lib/*
cabal install myPP
在my Setup.hs中,我有:

module Main (main) where
import Distribution.Simple
import Distribution.Simple.PreProcess
import Distribution.Simple.Utils
import Distribution.PackageDescription
import Distribution.Simple.LocalBuildInfo
import MyPP(myPP)
main :: IO ()
main = let hooks = simpleUserHooks
           pp = ("pp",myPP)
       in defaultMainWithHooks hooks {hookedPreProcessors = pp:knownSuffixHandlers}
然后,我尝试实际构建阴谋集团,只是为了得到错误:

Couldn't match type ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
              with ‘BuildInfo’
NB: ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.18.1.3’
    ‘BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.20.0.1’
Couldn't match type ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
              with ‘BuildInfo’
NB: ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.18.1.3’
    ‘BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.20.0.1’
尝试诊断错误:

Couldn't match type ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
              with ‘BuildInfo’
NB: ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.18.1.3’
    ‘BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.20.0.1’
Couldn't match type ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
              with ‘BuildInfo’
NB: ‘Cabal-1.18.1.3:Distribution.PackageDescription.BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.18.1.3’
    ‘BuildInfo’
      is defined in ‘Distribution.PackageDescription’
          in package ‘Cabal-1.20.0.1’

我的理解是,当你有一个同时依赖于ghc和Cabal的包时,你就得到了Cabal的版本,这个版本与ghc建立的时间有关。因此,myPP包是使用旧版本的cabal构建的。当custom Setup.hs由cabal运行时,它会导入我安装的cabal版本。这将导致错误。然而,我希望有一个更好的解决方案,而不仅仅是降级我的阴谋集团版本……

你不会喜欢另一个解决方案:从当前头部构建ghc,以获得1.21.1.0版本的新阴谋集团。不幸的是,无法使一个包的两个不同版本在一个构建中共存。降低阴谋集团的级别可能是最不痛苦的选择