私は Elm にかなり慣れていないのですが、Elm が GUI を扱う方法に深く惹かれています。しかし、深く考えた結果、Signal の下にあるリストまたは finger ツリー (Elm のライブラリに既に存在する場合、Haskell の finger ツリーのように) の 1 つの要素だけを効率的に更新するのは困難であり、そのサイズもさまざまであることがわかりました。時間に対して。
具体的には、動的な指の木を表現するには、
Signal [ {-指の木の要素型-} ]
しかし、finger ツリーの 1 つの要素だけを効率的に更新したい場合は、次のように記述する必要があります。
シグナル [ シグナル {-コア データ型-} ]
しかし、Elm ではシグナルはモナドではありません。2 つのレイヤーのシグナルを 1 つのレイヤーにフラット化するにはどうすればよいでしょうか?
コメント 1: この状況で Elm がどのように動作するかは詳しくわかりません。指の木全体を再処理するのは私の推測です。
コメント 2: たとえば、 とマークされたs
タイプの信号値と、 とマークされSignal (fingerTree Int)
た次の関数がありf
、その入力が であるs
としlift (fmap (+1))
ますSignal (fingerTree Int) -> Signal (fingerTree Int)
。また、s
要素が 1 つだけ変更された場合、関数f
は のすべての要素に対して (+1) 操作をやり直す必要がありs
ます。明らかに、それは時間の無駄であり、Elm が不変性を検出するのに十分なほどインテリジェントであるかどうかはわかりません。