Я пытаюсь передать случайную строку (которая оказывается числом) "4176730.5" в SHA в Haskell, чтобы получить большую случайную строку, например "2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881".
У меня есть этот код для генерации случайного числа и преобразования его в строку
num <- randomIO :: IO Float
let x = C.pack (show (num*10000000))
print x
но когда я передаю его в SHA с
let a = sha256 x
Я получаю ошибку
Couldn't match expected type ‘Data.ByteString.Lazy.Internal.ByteString’
with actual type ‘C.ByteString’
Я пытался привести свое число к C.ByteString, но я думаю, что согласно компилятору Haskell есть два типа Bytestring.
Полный код:
import Data.Digest.Pure.SHA
import System.Random
import qualified Data.ByteString.Char8 as C
main :: IO ()
main = do
num <- randomIO :: IO Float
let x = C.pack (show (num*10000000))
print x
let a = sha256 x
b = hmacSha256 "key" "some test message"
mapM_ print [showDigest a, showDigest b]
Видя, как, по-видимому, существует два типа Bytestring, и я приведу к неправильному, как правильно привести свою случайную строку?
В дополнение к ответу @ Cubic ниже, если я заменю
импортировать квалифицированный Data.ByteString.Char8 как C
с
import qualified Data.ByteString.Lazy as C
Я просто получаю эти ошибки
Couldn't match type ‘Char’ with ‘GHC.Word.Word8’
Expected type: [GHC.Word.Word8]
Actual type: String
и
Couldn't match expected type ‘C.ByteString’
with actual type ‘[Char]’