10

我刚刚一直在研究 Haskell 中的 FRP(主要是reactive-banana(推荐!)),我想知道这对他们来说是否常见,如果是响应式香蕉,那么在IOmonad 中操作而不是被限制为MonadIOrven的原因是什么更好,任何Monad(以便我可以提供自己的堆栈)?

在我看来,这是因为专注于 GUI 编程,你将它与一些现有的库集成在IO哪里?更改它以便我可以将它与自定义 monad 堆栈集成是否可行?

4

1 回答 1

4

如果你问为什么

reactimate :: Frameworks t => Event t (IO ()) -> Moment t ()

期望一个带有 type 值的事件,IO ()而不是允许一个带有 的自定义 monad M ()instance MonadIO M那么答案是这样的:

在实践中,自定义 monad 堆栈仅将状态/读取器/写入器效果添加到基本IOmonad。但是,理论上,完全可以添加像协程或非确定性这样的花哨的控制机制。我不知道如何将组合器产生的内部状态accumE与这些更一般的效果相结合,我也不知道在非确定性上下文中发生事件意味着什么。这就是为什么reactimate限制在IO.

如果您有一个属于 state/reader/writer 系列的自定义 monad 堆栈,那么通常可以将其映射到纯IO计算并将其与reactimate. 如果您发现这不起作用(我确实认为可能存在问题),我需要对具体情况进行更详细的描述才能提供帮助。

于 2014-10-26T18:13:13.763 回答