我在一个文件夹中制作了 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
,所以我需要安装它。从那时到现在的某个时刻:
一些可能有用的上下文:
您的帮助将不胜感激。
终于我能够解决这个问题了。我最初是从 Chocolatey 安装 Haskell 的 cabal、GHC 和其他组件,所以我尝试卸载它们并使用 GHCup 重新安装它们。
请注意,由于“cannot parse at nix”错误,cabal(版本 3.6.2.0)一开始无法运行。在我在
nix: disable
之前添加 2 个空格缩进后,它终于可以运行了,尽管有关于 nix 无法识别的警告。稍后可能会解决这个问题。
但总的来说,我可以像以前一样很好地运行 Haskell。