加入嵌套的 Monad

Joining Nested Monads

我正在使用 FRP.Sodium 并且我有一个 IO (Behavior (IO (Behavior))) 类型的对象。我需要将该对象转换为 IO (Behavior) 类型,使用类似于嵌套 join 的东西。这可能使用钠函数吗? a (b (a (b c))) -> a (b c)) 是否有更通用的解决方案?

没有明显的方法可以做到这一点。您可以使用像 sample and sync or updates and executeSyncIO/executeAsyncIO 这样的函数拼凑出正确类型的东西,但它可能不遵守 Monad 法则。

a (b (a (b c))) -> a (b c)) 没有更通用的解决方案,但是如果 bTraversable, which lets you rearrange things into a (a (b (b c))) by traversing 则外部 b