【发布时间】:2016-10-17 21:58:40
【问题描述】:
*抱歉这个基本问题,刚开始学习 Haskell。
我正在尝试编写一个函数来获取一个字符串并返回一个加密的哈希值。
我暂时想到的是:
encrypt :: ByteString -> ByteString
encrypt = do
x <- Crypto.Scrypt.encryptPassIO' (Pass "secret")
fmap Crypto.Scrypt.getEncryptedPass x
但是我得到了错误:
• Couldn't match expected type ‘ByteString’
with actual type ‘IO ByteString’
• In a stmt of a 'do' block: x <- encryptPassIO' (Pass plain)
In the expression:
do { x <- encryptPassIO' (Pass plain);
fmap Crypto.Scrypt.getEncryptedPass x }
In an equation for ‘encrypt’:
encrypt plain
= do { x <- encryptPassIO' (Pass plain);
fmap Crypto.Scrypt.getEncryptedPass x }
知道如何摆脱 IO 吗?
谢谢!
【问题讨论】:
-
你无法摆脱 IO(不使用最黑暗的魔法,或者通过调用另一个库方法)。相反,修正你的类型:
ByteString -> IO ByteString -
哦...好的。那么如何将值保存到数据库中呢? IE。再往下,我有
execute "INSERT INTO test VALUES ...我想使用加密值。 -
如果后面还有一个
IO操作,只需将它们都放在do表达式中。 -
我明白了。谢谢!!