如何安装和测试我正在本地开发的Haskell软件包?

时间:2015-09-14 21:41:08

标签: haskell import module cabal cabal-install

我正在开发一个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
    -- ...

1 个答案:

答案 0 :(得分:0)

错误很简单:如果您查看已成功导入模块的Main.hs示例

import Cryos.Expos

而不是

import Expos    -- wrong

那是因为,您要导入的模块是来自 Cryos.Expos的{​​{1}}。