状态monad或在FRP中构建对象图的另一种功能方法

时间:2018-01-11 01:25:07

标签: scala haskell functional-programming reactive-programming monads

我正在开发一个功能性反应式编程应用程序,在Sodium FRP和Scala中,具有大量基于GUI的交互。挑战在于使用FRP节点构建复杂图形 - 事件Stream和状态Cell。构造按顺序依赖步骤进行,将创建的对象传递给后续步骤。涉及多个域和UI模块。这个过程很脆弱,功能也很差。

似乎州Monad(SM)可能是一个很好的功能替代品。实际上,一些SM应用程序与对象图的构造没有什么不同,例如:https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-The-Zen-of-Expressing-State-The-State-MonadBreadth-First Search using State monad in Haskell。然而,我的搜索还没有产生SM用于对象构造或配置的任何用途。

具体来说,我计划将FRP图分割成子图,并为每个定义类似

的东西
case class ConfigureSubGraph {
           inputA: Option[Stream[String]] = None
           inputB: Option[Stream[String]] = None 
           inputC: Option[Cell[String]] = None
...
           intermediateOutputs: Option[Cell[DomainEntities]] }

将字段预先初始化为None。 (此处,CellStream来自SodiumFRP。)这将是"加载"进入状态Monad并逐步配置。

国家Monad可以为此工作吗?如果是,是否有任何实施建议?如果没有,是否有其他功能方法来构建对象图(不一定是FRP)?

0 个答案:

没有答案