加载模块对象的模块文件路径

时间:2015-04-21 06:36:58

标签: haskell module

在python中,它是

import argparser
print argparser.__file__

我的问题是:

  • 我怎么能在haskell中做同样的事情,即在haskell中使用加载的模块对象来获取模块的文件位置?
  • 在haskell中,库文件采用不可读.hi格式。有cabal install的方法,我可以将源文件下载到~/.cabal并在本地编译吗?

2 个答案:

答案 0 :(得分:4)

这并没有完全回答你的问题,但这就是我在Haskell中找到模块位置的方法。假设我有一个名为Data.Text的模块,我想找到它的位置。然后我最初发现它的包名:

$ ghc-pkg find-module Data.Text
/nix/store/cq4qqjii3s9ghr6p59kkrdf44wnyhpp4-ghc-7.8.4/lib/ghc-7.8.4/package.conf.d
/home/sibi/.ghc/x86_64-linux-7.8.4/package.conf.d
   text-1.2.0.4

现在我知道包名是text-1.2.0.4。所以,现在我所做的就是使用此命令查找模块位置:

$ ghc-pkg describe text-1.2.0.4   # (Just text should also work)

这会给你一个很大的输出。您感兴趣的字段为import-dirslibrary-dirs

要查找已安装软件包的来源,您可以使用@Martin所述的cabal get <package_name>

答案 1 :(得分:1)

我很确定你不能在Haskell做第一件事。但是,如果您只是想为自己找到这条路径,可以使用命令

ghc-pkg describe <package>

其中<package>是模块所属的包的名称。

要下载软件包的源代码,只需使用

即可
cabal get <package>

它会将没有任何依赖关系的源下载到当前目录中的目录<package>-<version>