Haskell模块(如Prelude)默认源码路径及import默认搜索路径咨询
Haskell模块源码路径与import搜索路径解答
1. Haskell模块(如Prelude)的源码默认路径
Prelude属于base标准库的核心模块,它的源码路径会随GHC安装方式和操作系统有所差异,常见的默认位置如下:
- Linux系统:通常在
/usr/share/ghc-<GHC版本号>/libraries/base-<base库版本号>/src/目录下,比如GHC 9.2.5对应的路径可能是/usr/share/ghc-9.2.5/libraries/base-4.16.4.0/src/ - macOS(Homebrew安装GHC):路径一般为
/usr/local/Cellar/ghc/<GHC版本号>/lib/ghc-<GHC版本号>/base-<base库版本号>/src/ - Windows系统:默认安装后通常在
C:\Program Files\GHC\<GHC版本号>\libraries\base\<base库版本号>\src\
要是不想记这些固定路径,用GHC自带工具查询更靠谱:
运行以下命令:
ghc-pkg describe base | grep -A 10 "hs-source-dirs"
输出内容里就能找到base库的源码目录,Prelude的源码文件Prelude.hs就存放在这里。
2. Haskell的import默认搜索路径
想知道GHC默认去哪里查找要import的模块,可以用这几种方法:
- 查看系统库根目录:运行
ghc -print-libdir,输出的目录就是GHC存放标准库的根目录,子目录libraries里就是各类系统模块的位置。 - 查看编译时的搜索路径:随便拿一个Haskell文件,用
ghc -v <文件名>.hs编译,输出内容里会有一段looking for packages in ...的内容,这里列出来的就是GHC会遍历的搜索路径。 - 在GHCi里查看当前路径:打开ghci后输入
:show paths,就能看到当前会话中GHCi的模块搜索路径,默认会包含当前工作目录和系统库路径。 - 自定义模块的搜索规则:自己写的模块放在当前工作目录时,GHC默认会自动搜索;如果模块在其他目录,可以用
ghc -i<目录路径>指定额外搜索路径,或者在项目的.cabal文件里配置hs-source-dirs字段来设置。
内容的提问来源于stack exchange,提问作者Taha Magdy
相关产品推荐
相关产品推荐

