簡體   English   中英

Haskell - 找不到模塊“Test.QuickCheck”

[英]Haskell - could not find module 'Test.QuickCheck'

當我嘗試 runhaskell 時,我收到一條錯誤消息,指出該模塊不存在。 這很奇怪,因為我嘗試先安裝它並說它是最新的。 知道如何解決這個問題嗎? 在此處輸入圖片說明

您可以嘗試在包含您的項目的本地目錄中創建包環境,如下所示:

c:\Users\...\ex1haskell> cabal install --lib --package-env . QuickCheck

這應該.ghc.environment.xxxex1haskell創建一個.ghc.environment.xxx形式的文件,希望可以通過runhaskell / ghci / ghc調用來獲取。

ghci會話中,啟動時出現以下消息是環境正在被拾取的標志:

從...加載的包環境

如果未明確給出--package-env位置,則使用默認位置。 根據文檔

默認情況下,它正在寫入 ~/.ghc/$ARCH-$OS-$GHCVER/environments/default 中的全局環境。 v2-install 提供了 --package-env 標志來控制修改哪些環境。

但似乎runhaskell在該默認位置找到環境文件時遇到問題。

注意 創建包環境時,可以同時指定多個包,如下所示:

cabal install --lib --package-env . QuickCheck random aeson transformers

此外,包環境只是文本文件,因此可以隨意刪除和重新創建本地環境。 實際的包二進制文件駐留在別處,可能會被cabal重用。

共同的環境

如果/當實際工具不同時很難調試,所以讓我們首先獲得一個統一的設置。 我將使用 docker 來獲取 GHC 8 和 Cabal 3.x:

docker run --rm -it haskell bash

理解這不是任意的,甚至不是先發制人的。 您所展示的 - cabal install --lib ...runhaskell ...確實適用於健全的工具安裝。 您可能有一個錯誤的安裝或一個具有不同行為的舊版本工具。

使用 runhaskell 運行單個文件

現在我們需要一個項目:

root@8a934c302dba:/# mkdir Ex1
root@8a934c302dba:/# cd Ex1
root@8a934c302dba:/Ex1# cat <<EOF >Main.hs
> import Test.QuickCheck
>
> main :: IO ()
> main = print =<< (generate arbitrary :: IO Int)
> EOF

和測試失敗:

root@8a934c302dba:/Ex1# runhaskell Main.hs

Main.hs:1:1: error:
    Could not find module `Test.QuickCheck'
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
1 | import Test.QuickCheck

並安裝庫:

root@8a934c302dba:/Ex1# cabal update && cabal install --lib QuickCheck

並成功運行:

root@8a934c302dba:/Ex1# runhaskell Main.hs
15

所以我上面的評論是錯誤的——我們不需要明確列出包,因為它在安裝后已經暴露了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM