我如何创建一个返回True一段时间的IO Bool,然后再返回False?

时间:2015-02-11 21:36:11

标签: haskell

今天我试图加深对IO monad的理解,我尝试编写一个函数,该函数采用Int n并返回IO Bool而不是True } n次,然后永远False

trueThenFalse :: Int -> IO Bool

通常情况下,我会通过递归解决类似这样的问题,但是这里似乎没有任何可以递归的内容。

我将如何实现此功能?这样做是否可能和/或可取?

1 个答案:

答案 0 :(得分:6)

作为IO (IO Bool)可能更有意义,因为你必须首先建立一些州:

trueThenFalse n = do
  holder <- newMVar n
  return (modifyMVar holder (\ k -> return (k - 1, k > 0)))

创建一个可变的持有者来存储多少个“遗骸”的计数,并返回另一个可以多次运行的IO操作,修改计数并返回True如果计数是&gt; 0