给出以下目录结构:
root
├── scripts
│ └── script1.hs
└── source
├── librarymodule.hs
└── libraryconfig.txt
其中“librarymodule.hs”是一个导出多个函数的库,其输出受其目录中libraryconfig.txt文件内容的影响。
script1.hs是需要使用librarymodule.hs中声明的函数的文件。
我无法在互联网上找到上述结构的解决方案,希望有人可以提供帮助。
答案 0 :(得分:3)
GHC有-i
选项。在root/scripts/
下,这会将root/source/
添加到搜索路径中:
ghc -i../source script1.hs
还可以考虑使用cabal
打包您的图书馆,这样您就可以安装它并在任何地方使用它而无需担心路径。
以下是包含data-files
的库的最小示例:
source/
├── mylibrary.cabal
├── LibraryModule.hs
└── libraryconfig.txt
mylibrary.cabal
name: mylibrary
version: 0.0.1
build-type: Simple
cabal-version: >= 1.10
data-files: libraryconfig.txt
library
exposed-modules: LibraryModule
other-modules: Paths_mylibrary
build-depends: base
default-language: Haskell2010
LibraryModule.hs
module LibraryModule where
import Paths_mylibrary -- This module will be generated by cabal
-- Some function that uses the data-file
printConfig :: IO ()
printConfig = do
n <- getDataFileName "libraryconfig.txt"
-- Paths_mylibrary.getDataFileName resolves paths for files associated with mylibrary
c <- readFile n
print c
有关Paths_*
模块的信息,请参阅此链接:https://www.haskell.org/cabal/users-guide/developing-packages.html#accessing-data-files-from-package-code
现在正在运行cabal install
应安装mylibrary
。
然后,在scripts/script1.hs
下,您可以使用您安装的库运行ghc script1.hs
。