我正在开发一个功能性反应式编程应用程序,在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-Monad或Breadth-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
。 (此处,Cell
和Stream
来自SodiumFRP。)这将是"加载"进入状态Monad并逐步配置。
国家Monad可以为此工作吗?如果是,是否有任何实施建议?如果没有,是否有其他功能方法来构建对象图(不一定是FRP)?