Haskell 为什么可以';是否使用hashUnique中的Int值?
我想将从hashUnique返回的值存储到列表中,但我不能这样做:Haskell 为什么可以';是否使用hashUnique中的Int值?,haskell,monads,Haskell,Monads,我想将从hashUnique返回的值存储到列表中,但我不能这样做: import Data.Unique import Data.List as L cnter = do u <- newUnique return (hashUnique u) main = cnter:[] 导入数据。唯一 导入数据。列表为L cnter=do ucnter是返回Int的IO操作。也就是说,cnter具有类型IO Int。您正试图将其用作Int。您真正想要的是执行操作,获得Int,然后使
import Data.Unique
import Data.List as L
cnter = do
u <- newUnique
return (hashUnique u)
main = cnter:[]
导入数据。唯一
导入数据。列表为L
cnter=do
ucnter
是返回Int的IO操作。也就是说,cnter
具有类型IO Int
。您正试图将其用作Int
。您真正想要的是执行操作,获得Int
,然后使用该结果:
import Data.Unique
import Data.List as L
cnter = do
u <- newUnique
return (hashUnique u)
main = cnter >>= \c -> print [c]
我一周前才开始学习Haskell,还不太了解IO monad的内容,但这里的情况是生成唯一的ID,并将它们存储到列表中。我在这里所做的只是一些愚蠢的测试示例,就本例而言,我所要知道的就是如何将(IO Int)
转换为Int
,您已经向我展示了:)我实际上想将使用hashUnique
得到的每个Int
值存储到一个列表中。能够打印列表的原因仅用于调试目的。
main = do c <- cnter
print [c]
main = cnter >>= print