无法加载任何模块在Haskell [重复]

mitkmikd  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(61)

这个问题已经有答案了

Prelude not loading Haskell(1个答案)
上个月关门了。
我在一个文件夹中创建了3个Haskell脚本,它们分别导入Text.PrintfData.CharData.ListSystem.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版本。
1.在我更新cabal之前,我更新它的尝试总是以错误告终。这可能与过去的Haskell安装有关,其中四分之一的软件包安装失败(它是ghc -我试图单独安装它,它最终安装在C:\tools中)。所以我强制重新安装了Haskell,终于安装了第四个软件包-cabal可以更新了。
一些可能有用的上下文:
1.我用的是Windows 11。
1.这些代码在Visual Studio Code上运行。
1.我没有做任何项目,它只是在一个文件夹中的这3个文件。
你的帮助将不胜感激。

yi0zb3m4

yi0zb3m41#

最后,我终于解决了这个问题。我最初从chocolatey安装了Haskell的cabal、GHC和其他组件,所以我尝试卸载它们,然后使用GHCup重新安装。
请注意,重新安装后,cabal(www.example.com版3.6.2.0)最初无法运行,因为“cannot parse at nix”错误。在我在nix: disable之前添加了2-space token之后,它终于可以运行了,尽管有nix无法识别的警告。以后可能会修好的。
但总的来说,我可以像以前一样很好地运行Haskell。

相关问题