为何Stack无法自动检测模块依赖?Diagrams-SVG导入异常
解决Stack脚本模式下辅助模块依赖未被检测的问题
Stack的--script模式默认仅分析主脚本文件的依赖关系,不会自动递归扫描同目录下其他模块的导入,这就是MyMod.hs里导入Diagrams.Backend.SVG时,Stack未识别到diagrams-svg包需求的原因。以下是几种可行的解决方法:
方法1:在主脚本显式声明依赖包
修改Main.hs顶部的Stack注释,添加--package diagrams-svg参数,强制Stack加载该包:
-- stack --resolver lts-19.0 --package diagrams-svg script {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} import Diagrams.Prelude import MyMod (val) main = print val
(此时主文件里的import Diagrams.Backend.SVG可以移除,依赖已通过参数显式声明)
方法2:运行时指定所有编译文件
执行Stack命令时,把所有需要编译的模块文件都列出来,让Stack扫描所有文件的依赖:
stack runghc --resolver lts-19.0 Main.hs MyMod.hs
方法3:改用标准Stack项目结构
如果你的代码模块较多,建议用stack new创建标准项目结构,Stack会自动扫描所有源文件的依赖,无需手动处理单个脚本的依赖声明。
内容的提问来源于stack exchange,提问作者mmachenry
相关产品推荐
相关产品推荐

