我刚刚在哈斯克尔调查玻璃钢(主要是reactive-banana (证明!)),我想知道这对他们是否常见,如果是反应性香蕉,为什么要在IO monad中操作,而不是被限制在MonadIO或更好的地方,任何Monad (这样我就可以提供自己的堆栈)?
在我看来,这似乎是因为对GUI编程的关注,在那里,您将它与一些在IO中操作的现有库集成在一起?更改它是否可行,这样我就可以将它与自定义的monad堆栈集成起来了?
发布于 2014-10-26 18:13:13
如果你在问为什么
reactimate :: Frameworks t => Event t (IO ()) -> Moment t ()期望一个值为IO ()的事件,而不是允许使用instance MonadIO M的自定义monad M (),那么答案是:
在实践中,自定义monad堆栈只将状态/读取器/写入器效果添加到基本的IO monad中。然而,在理论上,完全有可能添加一些花哨的控制机制,如协同控制或非确定性控制。我不知道如何将组合子accumE产生的内部状态与这些更一般的效应结合起来,我也不知道事件在非确定性环境中发生意味着什么。这就是为什么reactimate只限于IO的原因。
如果您有一个来自状态/读取器/写入器家族的自定义monad堆栈,那么通常可以将其映射到纯IO计算中,并与reactimate一起使用。如果您发现这不可行(我确实认为可能有问题),我需要更详细的描述具体情况才能提供帮助。
https://stackoverflow.com/questions/26560100
复制相似问题