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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:33:17