Я разрабатываю пакет 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.
хотя я вижу заполненную папку Exos-0.0.1.0 в моем каталоге Haskell 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
in Exos.hs
module Cryo.Exos
(
f,
g,
otherFunc
) where
import Cryo.Exos.Core
-- ...
in 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
-- ...
cabal repl. - person jub0bs   schedule 15.09.2015import Exos, аimport Cryo.Exos! (Очень неловко!) Другая часть вопроса остается, почемуghc-pkg unregister Exos-0.0.1.0ничего не делает? - person orome   schedule 15.09.2015