Cabal 运行无法看到交互式 haskell 模式可以看到的包

问题描述 投票:0回答:1

我在使用 cabal 时遇到问题。我正在寻找使用 hackage 的 Data.Finite 包。

我运行了

cabal install finite-typelits-0.2.0.0
,我相信它成功了。我现在看到目录了
.cabal/packages/hackage.haskell.org/finite-typelits

我想在我用 cabal 设置的库中使用这个包。该图书馆名为

haskell-scratch
。所以我将此包添加到
haskell-scratch.cabal
中,内容如下:

build-depends: base ^>=4.17.1.0,
               finite-typelits

然后,当我在库中使用

cabal run
时,出现以下错误:

test/Main.hs:3:1: error:
    Could not load module ‘Data.Finite’
    It is a member of the hidden package ‘finite-typelits-0.2.0.0’.
    Perhaps you need to add ‘finite-typelits’ to the build-depends in your .cabal file.
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
3 | import Data.Finite
  | ^^^^^^^^^^^^^^^^^^

如果我理解正确的话,这个错误告诉我我的项目无法看到新安装的包。然而,它建议的修复正是我所做的。

进一步放大我的困惑的是,当我使用emacs编辑文件

Main.hs
并使用haskell模式
C-c C-l
时,我没有问题。我的
Main.hs
看起来如下:

{-# LANGUAGE DataKinds #-}
module Main (main) where

import Data.Finite

main :: IO ()
main = putStrLn ("True maps to " ++ show (test True))

test :: Bool -> Finite 2
test True = 1
test False = 0

当我跑步时

C-c C-l
然后

λ> main

输出是预期的

Hello, Haskell! True maps to finite 1

所以我缺少一些关于阴谋集团的东西。我是 Haskell 新手,所以这可能是微不足道的。但是,对于我的一生,我似乎无法弄清楚它是什么。

提前致谢。

haskell cabal cabal-install
1个回答
0
投票

您可能没有将

build-depends
行包含在右侧的段落中。如果您尝试
cabal run
可执行文件
foo
,并且
foo
导入
Data.Finite
,那么您需要在
build-depends: finite-typelits
节中使用
executable foo

组件之间共享依赖关系是很常见的;如果你是这种情况,请查看 cabal 的

common
节,寻找减少重复的方法。

另外:依赖它之前不需要安装

finite-typelits
cabal
能够代表您从 Hackage 获取和构建依赖项,并且通常认为允许它是最佳实践;
cabal install
应保留用于提供可执行文件。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.