我有一个项目,在几个目录中都有一个库。 cabal 文件是用
hpack
生成的,看起来不错。该项目使用 cabal build
构建,主程序可以使用 cabal run xx
运行。
在 vscode 中使用 repl,我会 偶尔
Could not load module ‘GIS.Subdivisions’
It is a member of the hidden package ‘CatCoreConcepts-0.2’.
Perhaps you need to add ‘CatCoreConcepts’ to the build-depends in your .cabal file.
当然,该包已在依赖项中列出。该错误并不总是发生,我认为这是一个探针,其中一些数据缓存在 vscode Haskell HLS 插件中。有没有简单的方法来清理插件的缓存?重启HLS,vscode中的
Developer: reload window
没有任何效果。
这不是主要问题的答案,而是一些OP评论的答案。
我想说 cabal 文档很好(但很长)。
据我了解的简要总结(非官方文档)
包是一组组件
组件是一组模块(haskell 文件)
组件可分为两类:
executable
、test-suite
和 benchmark
来定义 runnablesmain-is
指向带有 entrypointMain
。library
来定义不可运行的组件exposed-modules
关键字公开的模块。可运行组件可以导入不可运行组件,即使它们定义在同一个包中。但反之亦然则不然。
作为一个好的做法,每个组件应该分开在不同的文件夹中。有些库需要命名约定。例如:测试位于具有相同名称和
test_XXXX.hs
格式的文件夹中(这是跨编程语言的常规,不仅是 Haskell)
当库在文件夹中分开时,必须指定字段 hs-source-dirs 以指向包含 haskell 文件的文件夹
runnable不是官方文档的一部分,但这是我的理解方式)
stack
的工作原理与
cabal
几乎相同,因为前者只是后者的不同前端。因此,除了不同的关键字和
yaml
格式之外,以上所有内容都可以应用于
stack
(请注意,cabal 更新频率高于 stack,因此 cabal 支持的某些功能在 stack 中可能会丢失。)如果您发现这有用,我想我正在向阴谋集团文档提出一个问题以包含它。
.ghci
中有一些行,并将其清理为仅包含
:set xxx
条目,没有
:m xxx
也没有
:l xxx
我的印象是带有 :m ModuleX
的行导致了错误,产生了误导性的错误消息。