[英]FRP frameworks and IO
我剛剛在Haskell中調查FRP(主要是reactive-banana
(推薦!)),我想知道它們是否常見,並且在反應性香蕉的情況下,在IO
monad中操作的原因是什么,而不是受限制MonadIO
,或者更好,任何Monad
(這樣我可以提供自己的堆棧)?
在我看來,這是因為專注於GUI編程,你將它與一些在IO
中運行的現有庫集成? 是否可以更改它以便我可以將它與自定義monad堆棧集成?
如果你問為什么
reactimate :: Frameworks t => Event t (IO ()) -> Moment t ()
期望一個值為IO ()
的事件,而不是允許使用instance MonadIO M
的自定義monad M ()
,那么答案是這樣的:
實際上,自定義monad堆棧僅將狀態/讀取器/寫入器效果添加到基本IO
monad。 但是,從理論上講,完全可以添加協同控制機制,如協程或非確定性。 我不知道如何將組合器accumE
產生的內部狀態與這些更普遍的影響結合accumE
,我不知道事件在非確定性環境中發生意味着什么。 這就是為什么reactimate
限制只限於IO
。
如果您具有狀態/讀取器/寫入器系列的自定義monad堆棧,則通常可以將其映射到純IO
計算並將其與reactimate
使用一起reactimate
。 如果您發現這不起作用(我認為可能存在問題),我需要對具體情況進行更詳細的描述才能提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.