gpt4 book ai didi

haskell - IO monad 在 System.Random 中如何工作

转载 作者:行者123 更新时间:2023-12-02 11:24:59 27 4
gpt4 key购买 nike

import System.Random

main = do
g <- newStdGen
a <-take 5 (randoms g :: [Double])
return ()

所以这段代码不起作用,因为显然我分配给 a 的类型是 [Double] 而不是 IO [Double],但我认为你永远无法逃脱 IO?那么为什么我似乎已经逃离了 IO,尽管 g 是 IO 类型?我仍然对 IO monad 在 do 表示法中如何工作感到困惑。

最佳答案

你无法逃脱IO ,但在 do 内阻止你实际上逃避本身。

宽松地:当你写 g <- newStdGen 时在 do block ,然后您可以使用 g稍后在 block 中,就好像它只有类型 StdGen ,而不是 IO StdGen 。在 block 的末尾,您返回的任何内容都将被包装在 IO 中。 .

关于haskell - IO monad 在 System.Random 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com