You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用stack ghci无法导入System.Directory模块,但runhaskell可正常运行?

为什么runhaskell能导入System.Directory但stack ghci不行?

这个问题其实挺常见的,核心原因就在于**runhaskell和stack ghci用的是完全两套独立的GHC环境**,我来给你拆解清楚:

两者的环境差异

  • runhaskell的逻辑:它直接调用你系统里全局安装的GHC。大部分系统级的GHC默认都会预装directory包(毕竟很多基础工具都依赖它),所以你跑代码的时候能顺利找到System.Directory模块。
  • stack ghci的逻辑:Stack是个隔离式的构建工具,它会用自己管理的GHC版本和依赖集合——要么是官方的快照,要么是你项目本地定义的依赖。如果你的项目没在配置文件里明确声明要依赖directory包,Stack就不会把它加入到ghci的搜索路径里,自然就报找不到模块的错了。

解决方法

永久解决(推荐)

修改你的项目依赖配置文件,把directory加进去:

  • 如果用的是.cabal文件,找到你的可执行目标(比如executable Hello),在build-depends里添加directory(可以加上版本范围,比如directory >= 1.3 && < 2):
    executable Hello
      main-is:             Main.hs
      build-depends:       base >= 4.14 && < 5,
                           directory >= 1.3 && < 2
      -- 其他配置项保持不变
    
  • 如果用的是package.yaml,在对应可执行文件的dependencies列表里加上:
    executables:
      Hello:
        main: Main.hs
        dependencies:
          - base >= 4.14 && <5
          - directory >= 1.3 && <2
    

改完之后重启stack ghci,Stack会自动处理依赖下载和加载,这时候就能正常导入模块了。

临时测试方案

如果只是想临时测试不想改配置,可以在启动ghci的时候加上--package参数:

stack ghci --package directory

这样会临时把directory包加入到ghci的环境里,但这只是权宜之计,长期还是建议把依赖写到配置文件里,避免后续出现同样的问题。

内容的提问来源于stack exchange,提问作者SAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:47