今天我试图加深对IO monad的理解,并且我尝试编写一个函数,它接受Int n并返回一个IO Bool生成True n时间,然后False永远.
trueThenFalse :: Int -> IO Bool
Run Code Online (Sandbox Code Playgroud)
通常我会用递归来解决类似这样的事情,但是这里似乎没有任何东西可以递归.
我该如何实现这个功能?这样做是否可行和/或可取?
它可能更有意义IO (IO Bool),因为你必须首先建立一些状态:
trueThenFalse n = do
holder <- newMVar n
return (modifyMVar holder (\ k -> return (k - 1, k > 0)))
Run Code Online (Sandbox Code Playgroud)
这创建了一个可变的持有者来存储多少次"离开"的计数,并返回另一个IO可以多次运行的操作,修改计数并True在计数> 0时返回.
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |