如何在Cabal文件中为带序号的Literate Haskell模块指定显式路径?
在Cabal中为带前缀文件名的Literate Haskell模块指定路径
要保留现有带序号前缀的文件名,同时让Cabal正确关联到对应的模块,你可以通过Cabal文件的module-files字段建立模块名与文件名的映射,具体配置方式如下:
库模块配置
在Cabal文件的library区块中,按以下格式配置:
library -- 指定源码所在目录 hs-source-dirs: lhs_notes -- 列出文件中定义的模块名 exposed-modules: Intro Seq -- 按需添加其他模块... -- 建立模块名与实际文件名的映射关系 module-files: Intro => "1 - Intro.lhs" Seq => "2 - Seq.lhs" -- 按需添加其他映射... -- 其他必填配置项 build-depends: base >=4.14 && <5 default-language: Haskell2010
可执行程序配置
如果是构建可执行文件,主模块(如Main)若采用相同命名规则,直接在main-is中指定文件名即可,非主模块仍用module-files映射:
executable lhs-notes-app hs-source-dirs: lhs_notes -- 指定主程序的文件名 main-is: "0 - Main.lhs" -- 列出依赖的非主模块 other-modules: Intro Seq -- 映射非主模块的文件名 module-files: Intro => "1 - Intro.lhs" Seq => "2 - Seq.lhs" build-depends: base >=4.14 && <5 default-language: Haskell2010
关键注意点
module-files字段要求Cabal版本≥2.2,使用旧版本需先升级Cabal。- 文件名包含空格或特殊字符时,必须用双引号包裹,避免解析错误。
内容的提问来源于stack exchange,提问作者the thinker
相关产品推荐
相关产品推荐

