2

我正在尝试使用 replit.com 上的 Crypto.Hash 模块对文本进行哈希处理,但我不知道如何解决此故障:找不到模块“Crypto.Hash”</p>

代码:

import Crypto.Hash (hashWith, SHA256(..))
import Data.ByteString (ByteString)


main = do
  putStrLn "Hello"
  putStrLn "World"
  hashWith SHA256 ("hello" :: ByteString)

我将非常感谢您的帮助!!!

4

1 回答 1

4

它看起来replit.com是基于 Nix 的,它使用replit.nix配置文件来配置 Nix 环境,包括加载的 GHC 包。

因此,让这个工作的一种方法是编辑replit.nix文件。(默认情况下,“文件”选项卡中不会显示,但您可以单击右上角垂直的“...”并选择“显示隐藏文件”进行查看。)修改它看起来就像是:

{ pkgs }: {
    deps = [
        (pkgs.haskellPackages.ghcWithPackages (pkgs: [
          pkgs.cryptonite
        ]))
        pkgs.haskell-language-server
    ];
}

现在,当您运行源代码时,它应该重新配置 Nix 环境并加载所需的cryptonite包。您可能还需要稍微修改您的代码,因为它使用OverloadedStrings扩展,而hashWith不是 IO 操作。我得到了以下Main.hs工作:

{-# LANGUAGE OverloadedStrings #-}

import Crypto.Hash (hashWith, SHA256(..))
import Data.ByteString (ByteString)

main = do
  print $ hashWith SHA256 ("hello" :: ByteString)
于 2022-03-02T03:16:31.023 回答