从父目录导入haskell模块

时间:2018-01-20 13:22:28

标签: haskell module

给出以下目录结构:

root
├── scripts
│   └── script1.hs
└── source
    ├── librarymodule.hs
    └── libraryconfig.txt

其中“librarymodule.hs”是一个导出多个函数的库,其输出受其目录中libraryconfig.txt文件内容的影响。

script1.hs是需要使用librarymodule.hs中声明的函数的文件。

我无法在互联网上找到上述结构的解决方案,希望有人可以提供帮助。

1 个答案:

答案 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