[英]cabal repl gives error "cannot find module" but it is listed as dependency and cabal build works
我在幾個目錄中有一個帶有庫的項目。 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.
當然,package 列在依賴項中。 該錯誤並非總是發生,我認為這是一個探針,其中一些數據緩存在 vscode Haskell HLS 插件中。 有沒有一種簡單的方法來清理插件的緩存? 重啟 HLS 和Developer: reload window
沒有任何效果。
我遇到了 VSCode 認為模塊被隱藏的問題。 SO上有很多答案,例如this one 。 可能的解決方案,希望有所幫助,
ghc-pkg expose CatCoreConcepts
這不是對主要問題的回答,而是對一些 OP 評論的回答。
我會說陰謀集團的文件很好(但很長)。
據我了解的簡要總結(不是官方文檔)
一個 Package 是一套組件
組件是一組模塊(haskell 文件)
組件可以分為兩組:
executable
、 test-suite
和benchmark
來定義可運行文件main-is
指向具有入口點的文件Main
。library
來定義不可運行的組件exposed-modules
。可運行組件可以導入不可運行組件,即使它們定義在同一個 package 中。 但反之亦然。
作為一種良好的做法,每個組件都應該分開放在不同的文件夾中。 一些庫需要命名約定。 例如:測試在同名文件夾中,格式為test_XXXX.hs
(這在編程語言中很常見,不僅是 Haskell)
當庫在文件夾中分隔時,必須指定字段 hs-source-dirs 以指向包含 haskell 文件的文件夾
( runnable這個名字不是官方文檔的一部分,但是我理解的方式)
stack
的工作方式與cabal
幾乎相同,因為前者只是后者的不同前端。 因此,除了不同的關鍵字和yaml
格式之外,以上所有內容都可以應用於stack
(請注意,cabal 更新比堆棧更頻繁,因此 cabal 支持的某些功能可能會在堆棧中丟失。)
如果您覺得這很有用,我想我正在向 cabal 文檔提出一個問題以包含它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.