无法在 Haskell 中加载任何模块

问题描述 投票:0回答:1

我在一个文件夹中制作了 3 个 Haskell 脚本,它们导入

Text.Printf
Data.Char
Data.List
System.Random
:

HaskellList.hs

import Data.List
import System.Random
main :: IO ()
main = do
    let vb = [50, 40, 30, 20, 10, 0]
    let vbEli = head vb
    let vbElm = vb !! 2
    let vbElf = last vb
    let vbIni = elemIndex 30 vb
    let vbInf = maybe (-1) (\i -> length vb - i - 1) (elemIndex 30 (reverse vb))
    let vbLen = length vb
    let vbMin = minimum vb
    let vbMax = maximum vb
    let vbSum = sum vb
    let vbAve = fromIntegral (sum vb) / fromIntegral (length vb)
    let vbSub = take 4 (drop 1 vb)
    let vbFil = filter (\n -> n `mod` 4 == 0) vb
    let vbMap = map (\n -> n * n) vb
    let vbSuf = shuffle' vb (length vb) gen
    let vbRev = reverse vb
    let vbAsc = sort vb
    let vbDsc = sortBy (flip compare) vb
    mapM_ putStrLn [show vbEli, show vbElm, show vbElf, show vbIni, show vbInf, show vbLen, show vbMin, show vbMax, show vbSum, show vbAve,
                    show vbSub, show vbFil, show vbMap, show vbSuf, show vbRev, show vbAsc, show vbDsc]

HaskellNumber.hs

import Text.Printf

main :: IO ()
main = do
    let vb :: Int = 4
    let vbPo2 :: Double = 2 ** fromIntegral vb
    let vbPoe :: Double = exp (fromIntegral vb)
    let vbRo2 :: Double = sqrt (fromIntegral vb)
    let vbRoe :: Double = fromIntegral vb ** (1 / exp 1)
    let vbLo2 :: Double = logBase 2 (fromIntegral vb)
    let vbLoe :: Double = log (fromIntegral vb)
    let vbStr = show vb
    let vbPad :: String = printf "%06d" vb
    mapM_ putStrLn [show vbPo2, show vbPoe, show vbRo2, show vbRoe, show vbLo2, show vbLoe,
                    show vbStr, show vbPad]

HaskellString.hs

import Data.Char (toLower, toUpper)
import Data.List (findIndex, intercalate, isInfixOf, tails)
main :: IO ()
main = do
    let vb = "Yasuraoka Hanabi"
    let vbEli = head vb
    let vbElm = vb !! 7
    let vbElf = last vb
    let vbIni = maybe (-1) id (findIndex ((map toLower "NA") `isInfixOf`) (tails (map toLower vb)))
    let vbInf = maybe (-1) id (findIndex ((map toLower "NA") `isInfixOf`) (reverse (tails (map toLower vb))))
    let vbLen = length vb
    let vbCon = vb ++ " is best girl!"
    let vbSub = take 4 (drop 10 vb)
    let vbLoc = map toLower vb
    let vbUpc = map toUpper vb
    let vbRep = intercalate "-" (words vb)
    let vbSpl = words vb
    mapM_ putStrLn [
        show vbEli, show vbElm, show vbElf, show vbIni, show vbInf, show vbLen,
        show vbCon, show vbSub, show vbLoc, show vbUpc, show vbRep,
        show vbSpl]

问题是所有模块都无法导入。当我运行它们时,它们总是返回错误并显示如下所示的消息(这个带有

Data.List
):

    Could not load module `Data.List'
    It is a member of the hidden package `base-4.18.0.0'.
    You can run `:set -package base' to expose it.
    (Note: this unloads all the modules in the current scope.)
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
1 | import Data.List

  | ^^^^^^^^^^^^^^^^

我尝试删除需要它的导入和代码行,结果是这样的:

    Could not load module `Prelude'
    It is a member of the hidden package `base-4.18.0.0'.
    You can run `:set -package base' to expose it.
    (Note: this unloads all the modules in the current scope.)
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
1 | main :: IO ()

  | ^

在Haskell是这样之前,我可以很好地运行Haskell文件,只是我无法导入

System.Random
,所以我需要安装它。从那时到现在的某个时刻:

  1. 我将 Cabal 更新到版本 3.10.1.0。
  2. 在我更新 cabal 之前,我尝试更新它总是以错误告终。这可能与过去的 Haskell 安装有关,其中四分之一的软件包安装失败(这是 ghc — 我尝试单独安装它,但最终安装在 C:ools 中)。所以我强制重新安装了 Haskell,第四个软件包终于安装了——并且 cabal 可以更新了。

一些可能有用的上下文:

  1. 我使用 Windows 11。
  2. 代码在 Visual Studio Code 上运行。
  3. 我没有制作任何项目,只是一个文件夹中的这3个文件。

您的帮助将不胜感激。

haskell ghc cabal
1个回答
0
投票

终于我能够解决这个问题了。我最初是从 Chocolatey 安装 Haskell 的 cabal、GHC 和其他组件,所以我尝试卸载它们并使用 GHCup 重新安装它们。

请注意,由于“cannot parse at nix”错误,cabal(版本 3.6.2.0)一开始无法运行。在我在

nix: disable
之前添加 2 个空格缩进后,它终于可以运行了,尽管有关于 nix 无法识别的警告。稍后可能会解决这个问题。

但总的来说,我可以像以前一样很好地运行 Haskell。

© www.soinside.com 2019 - 2024. All rights reserved.