从父目录导入haskell模块

从父目录导入haskell模块,haskell,module,Haskell,Module,给定以下目录结构: root ├── scripts │   └── script1.hs └── source    ├── librarymodule.hs    └── libraryconfig.txt 其中librarymodule.hs是一个导出多个函数的库,其输出受其目录中libraryconfig.txt文件内容的影响 script1.hs是需要使用librarymodule.hs中声明的函数的文件 我在互联网上找不到上述结构的解决方案,希望有人能提供帮助。GHC有一个-I

给定以下目录结构:

root
├── scripts
│   └── script1.hs
└── source
    ├── librarymodule.hs
    └── libraryconfig.txt
其中librarymodule.hs是一个导出多个函数的库,其输出受其目录中libraryconfig.txt文件内容的影响

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

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

GHC有一个-I选项。在root/scripts/下,这将向搜索路径添加root/source/:

ghc -i../source script1.hs

也可以考虑使用Cabar打包你的库,这样你就可以在任何地方安装它,不用担心路径。

下面是一个包含数据文件的库的最小示例:

我的图书馆 LibraryModule.hs 有关路径模块的信息,请参阅此链接:

现在正在运行的cabal install应该安装mylibrary

然后,在scripts/script1.hs下,您可以使用安装的库运行ghc script1.hs。

ghc有一个-i选项。在root/scripts/下,这将向搜索路径添加root/source/:

ghc -i../source script1.hs

也可以考虑使用Cabar打包你的库,这样你就可以在任何地方安装它,不用担心路径。

下面是一个包含数据文件的库的最小示例:

我的图书馆 LibraryModule.hs 有关路径模块的信息,请参阅此链接:

现在正在运行的cabal install应该安装mylibrary


然后,在scripts/script1.hs下,您可以使用安装的库运行ghc script1.hs。

感谢您的响应,但使用此解决方案,librarymodule将无法再读取libraryconfig.txt的内容,因为该文件以前位于同一目录中。在我的情况下,我将如何使用阴谋集团?我想不出来你必须在库中更改libraryconfig.txt的路径,要么将其设置为绝对路径,要么将其设置为可配置路径。在cabal软件包中,你可以指定与软件包一起安装,cabal为您的软件包提供了一个自定义模块,用于抽象这些文件的位置。我刚刚使用命令cabal init在root中创建了cabal文件,cabal是否安装了创建dist文件夹的程序,下一步是什么?我在回答中添加了一个小示例。我希望这足以工作,但请注意,学习这些工具堆栈或cabal安装需要时间才能完全理解正在发生的事情。感谢您的响应,但使用此解决方案,librarymodule将无法再读取libraryconfig.txt的内容,因为该文件以前位于同一目录中。在我的情况下,我将如何使用阴谋集团?我想不出来你必须在库中更改libraryconfig.txt的路径,要么将其设置为绝对路径,要么将其设置为可配置路径。在cabal软件包中,你可以指定与软件包一起安装,cabal为您的软件包提供了一个自定义模块,用于抽象这些文件的位置。我刚刚使用命令cabal init在root中创建了cabal文件,cabal是否安装了创建dist文件夹的程序,下一步是什么?我在回答中添加了一个小示例。我希望这将足以工作,但请注意,这将需要时间来学习这些工具堆栈或阴谋安装,以充分了解正在发生的事情。
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
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