今天我试图加深对 IO monad 的理解,我尝试编写一个接受 Int
n
并返回 IO Bool 的函数
会产生 True
n
次,然后永远产生 False
。
trueThenFalse :: Int -> IO Bool
通常我会用递归来解决类似的问题,但这里似乎没有什么可以递归的。
我该如何实现这个功能?这样做可能和/或可取吗?
最佳答案
作为 IO (IO Bool)
可能更有意义,因为您必须首先设置一些状态:
trueThenFalse n = do
holder <- newMVar n
return (modifyMVar holder (\ k -> return (k - 1, k > 0)))
这会创建一个可变持有者来存储“剩下”的 True 数量,并返回另一个可以多次运行的 IO
操作,修改计数并返回 True
如果计数 > 0。
关于haskell - 我如何创建一个 IO Bool 暂时返回 True,然后返回 False?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464973/