haskell - 我如何创建一个 IO Bool 暂时返回 True,然后返回 False?

标签 haskell

今天我试图加深对 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/

相关文章:

haskell - 如何检查之前是否调用过函数?

haskell - 用 haskell 编写迷你语言, "while"语句和 block { } 出现问题

haskell - "takeWhile (<= (maxBound::Word8)) primes"挂起

Haskell 进口申报

haskell - 将元素列表折叠为元素集合

perl - 在 Perl 中实现函数式编程

haskell - 相乘流(表示多项式系数)

haskell - 为什么 Template Haskell 在编译期间允许任意 IO 操作?

haskell - 如何派生具有类型族的记录的实例

haskell - 如何将任意类型转换为字符串,而不在字符串中添加额外的引号?