我将如何创建一个 returns True 一会儿,然后 False 的 IO Bool ?
How would I create an IO Bool that returns True for a while, then False thereafter?
今天我试图加深对 IO monad 的理解,我尝试编写一个函数,它接受一个 Int
n
和 returns 一个 IO Bool
比产生 True
n
次,然后 False
永远。
trueThenFalse :: Int -> IO Bool
通常我会用递归来解决类似的问题,但这里似乎没有什么可以递归的。
我将如何实现这个功能? and/or 这样做是否可行?
作为 IO (IO Bool)
可能更有意义,因为您必须先设置一些状态:
trueThenFalse n = do
holder <- newMVar n
return (modifyMVar holder (\ k -> return (k - 1, k > 0)))
这会创建一个可变容器来存储 "left," 和 returns 有多少个 True 的计数,另一个 IO
操作可以 运行 多次,修改如果计数 > 0,则计数并返回 True
。
今天我试图加深对 IO monad 的理解,我尝试编写一个函数,它接受一个 Int
n
和 returns 一个 IO Bool
比产生 True
n
次,然后 False
永远。
trueThenFalse :: Int -> IO Bool
通常我会用递归来解决类似的问题,但这里似乎没有什么可以递归的。
我将如何实现这个功能? and/or 这样做是否可行?
作为 IO (IO Bool)
可能更有意义,因为您必须先设置一些状态:
trueThenFalse n = do
holder <- newMVar n
return (modifyMVar holder (\ k -> return (k - 1, k > 0)))
这会创建一个可变容器来存储 "left," 和 returns 有多少个 True 的计数,另一个 IO
操作可以 运行 多次,修改如果计数 > 0,则计数并返回 True
。