我对 Elm 比较陌生,并且被 Elm 处理 GUI 的方式深深吸引。但是经过深思熟虑后,我发现很难有效地仅更新列表或手指树中的一个元素(就像 Haskell 中的手指树,如果它已经存在于 Elm 的库中),它位于 Signal 下,并且它的大小也有所不同与时间抗衡。
具体来说,要表达一个动态的手指树,我们必须写
Signal [ {-手指树的元素类型-} ]
但是如果我们想有效地更新手指树的一个元素,我们必须写
Signal [ Signal {-核心数据类型-} ]
但是在 Elm 中 Signal 不是 Monad,那么如何将两层 Signals 扁平化为一层呢?
评论 1:我不详细了解 Elm 在这种情况下的行为。重新处理整个手指树只是我的猜测。
注释 2:例如,假设我们有一个信号值,标记为s,类型为Signal (fingerTree Int),以及以下函数,标记为f,其输入为s,例如,lift (fmap (+1))其类型为Signal (fingerTree Int) -> Signal (fingerTree Int)。如果s只有一个元素发生了变化,函数f必须对s. 显然,这是在浪费时间,我不确定 Elm 是否足够聪明,可以检测到不可变性。