如何诊断"Perhaps you need to add xxx to the build-depends in your .cabal file",当它已经在阴谋集团文件中时?



我认为唯一有趣的位是我的进口和我的阴谋。这是我将如何使用有问题的导入的导入和演示(Database.CQL.IO.Log)。

module FDS.Database.Cassandra where
import           Prelude                         hiding(init)
import           Database.CQL.IO                 as Client hiding(Logger)
import           Database.CQL.IO.Log             as CQLLog
import qualified Database.CQL.Protocol           as CQL
import           Numeric.Natural
import           System.Logger                   (Logger)
cqlLogger :: Logger -> CQLLog.Logger
cqlLogger logger = undefined

但是,我得到错误:

src/FDS/Database/Cassandra.hs:7:1: error:                                                                                              
    Could not load module `Database.CQL.IO.Log'                                                                                                                                    
    It is a member of the hidden package `cql-io-1.1.0'.                                                                                                                           
    Perhaps you need to add `cql-io' to the build-depends in your .cabal file.                                                                                                     
    Use -v to see a list of the files searched for.                                                                                                                                
  |                                                                                                                                                                                
7 | import           Database.CQL.IO.Log             as CQLLog                                                                                                                     
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                                     

但是,正如我们从阴谋上看到的那样,它在那里:

library
  ghc-options:    -Wall -Wtabs -Wincomplete-record-updates
  default-extensions:
      OverloadedStrings
  exposed-modules:
    FDS
    , FDS.Config.Core
    , FDS.Config.Dhall
    , FDS.Data.Util
    , FDS.Database.Cassandra
  other-modules:
    FDS.Data.Hobo.Defs
  build-depends:
    prelude
    , base-noprelude    ^>=4.12
    , bytestring        ^>=0.10.8.2
    , conduit           ^>=1.3.1
    , containers        ^>=0.6
    , cql               ^>=4.0.1
    , cql-io            ^>=1.1.0

要注意的一件事,我在stack.yaml中的extra-deps中确实有CQL-IO,因为最新版本尚未在LTS中。

q& a来自注释

q 您的阴谋集中是否还有其他组件(例如可执行文件,基准,测试套件)?

a

q 他们是否还使用fds.database.cassandra(但也许不取决于CQL-IO)?

a 尚未,而是计划以后。所以我还没有触摸其他组件。

q 您的构建工具选择的CQL-IO版本是否仍然导出数据库。cql.io.log?

a 它似乎是这样做的。

q 看到该错误时您正在运行的确切命令是什么?

a stack --nix build --nix正在使用的唯一有趣的位(afaik)正在拉动所需的系统软件包,例如OpenSSL。

上面的评论对问题的一般情况非常有见地(如提出);答案是,Cabal最近支持的子图案可能没有声明visibility: true

但是,在我的具体情况下,答案是查看有问题的库的重新出口。我可以解决这个问题,因为CQL-IO作者从主库重新出口了Logger (..)LogLevel(..)

这样就可以允许我编写我的代码。

当我试图使用tinylog时,一个更好的答案是我的情况非常具体的,就是已经有一个库...这是该库中的代码,证明了如何解决问题(并完全解决我的问题,因为我现在不必编写任何代码)。

这是相关摘录:

module Database.CQL.IO.Tinylog (mkLogger) where
import Data.ByteString.Builder
import Data.ByteString.Lazy (ByteString)
import Database.CQL.IO (Logger (..), LogLevel (..))
import Database.CQL.IO.Hexdump
import qualified Data.ByteString.Lazy as L
import qualified System.Logger        as Tiny
-- | Create a cql-io 'Logger' that delegates log messages to
-- the given tinylog 'Tiny.Logger'. Requests and responses are
-- logged on 'Tiny.Trace' level.
mkLogger :: Tiny.Logger -> Logger
mkLogger l = Logger
    { logMessage  = tinylogMessage  l
    , logRequest  = tinylogRequest  l
    , logResponse = tinylogResponse l
    }

这是我在上面的示例中调整进口的方式以确认并使GHC感到高兴(尽管我现在将其废除以使用cql-io-tinylog):

import           Prelude                         hiding(init, log)
import           Database.CQL.IO                 hiding(Logger)
import qualified Database.CQL.IO                 as CQLIO
import qualified Database.CQL.Protocol           as CQL
import           Numeric.Natural
import           System.Logger                   hiding(defSettings)

最新更新