【发布时间】:2019-03-25 19:23:37
【问题描述】:
我正在使用一个库,我可以提供一个函数a -> IO (),它会偶尔调用它。
因为我的函数的输出不仅取决于它作为输入接收的a,还取决于以前的a,所以我编写一个函数[a] -> IO ()会容易得多,其中@ 987654325@ 是无限的。
我可以写一个函数吗:
magical :: ([a] -> IO ()) -> (a -> IO ())
这会收集它从回调中接收到的a,并将它们作为惰性无限列表传递给我的函数?
【问题讨论】:
-
“因为我的函数的输出不仅取决于它作为输入接收的 a” - 不幸的是你不能在 Haskell 中这样做,因为它是引用透明的。也就是说,一个函数的输出值只取决于传递给它的参数。
-
这对于纯函数来说是正确的,但是因为这是在 IO monad 中,所以我可以在调用之间存储状态。这是我目前正在手动执行的操作,并试图避免
标签: haskell