我正在开发一个Haskell软件包,并希望将其作为已安装的软件包进行测试。也就是说,我希望能够在我的其他软件包中安装它,然后import
或:m +
。
我可以成功构建我的包,并且(显然)可以使用
成功安装它cabal install
报告
Resolving dependencies...
Configuring Exos-0.0.1.0...
Building Exos-0.0.1.0...
Installed Exos-0.0.1.0
但是所有导入包的尝试都会失败,例如(例如在GHCi中)
<no location info>:
Could not find module ‘Exos’
It is not a module in the current program, or in any known package.
即使我在Haskell Exos-0.0.1.0
目录中可以看到填充的lib
文件夹。 (甚至“卸载”也失败了ghc-pkg unregister
,报告ghc-pkg: cannot find package Exos-0.0.1.0
。)
如何安装和测试我正在本地开发的软件包,以便它的行为类似于我安装的Haskell软件包的一部分 - 特别是这样我可以像其他任何软件包那样导入它(并“卸载”它)?
我的包有结构
Exos.cabal
Exos/
Cryo/
Exos.hs
Exos/
Display.hs
Core.hs
包含Exos.cabal
name: Exos
version: 0.0.1.0
build-type: Simple
- ...
library
exposed-modules: Cryo.Exos,
Cryo.Exos.Display
other-modules: Cryo.Exos.Core
-- other-extensions:
build-depends: base >=4.8,
containers >= 0.5.5.1,
split >= 0.2.2,
MissingH >= 1.3.0.1
-- hs-source-dirs:
default-language: Haskell2010
Exos.hs
中的
module Cryo.Exos
(
f,
g,
otherFunc
) where
import Cryo.Exos.Core
-- ...
Core.hs
中的
module Cryo.Exos.Core where
-- ...
并在Display.hs
module Cryo.Exos.Display
(
showSomething,
showSomethingElse
) where
import Data.Char
-- ...
import Cryo.Exos.Core
import Cryo.Exos
FWIW,在我的IDE中,我可以使用上面.cabal
文件中的以下部分编写并成功运行“应用程序”
executable enigma-hs
main-is: Main.hs
build-depends: base >=4.8,
Exos
hs-source-dirs: tests
default-language: Haskell2010
以及Exos/tests/Main.hs
module Main where
import System.IO
import Cryo.Exos
import Cryo.Exos.Display
main :: IO ()
main = do
putStr $ showSomething
putStr $ showSomethingElse
-- ...
答案 0 :(得分:0)
错误很简单:如果您查看已成功导入模块的Main.hs
示例
import Cryos.Expos
而不是
import Expos -- wrong
那是因为,您要导入的模块是来自包 Cryos.Expos
的{{1}}。