私の特定の問題は次のようなものです:
と が与えられたEvent t [a]
場合Event t ()
(ティック イベントとしましょう)、 を生成したいと思いますEvent t a
。つまり、ティック イベントが発生するたびに、入力リストから連続した項目が返されるイベントです。
Reflex には次のヘルパーがあります。
zipListWithEvent :: (Reflex t, MonadHold t m, MonadFix m) => (a -> b -> c) -> [a] -> Event t b -> m (Event t c)
これは私がやりたいことを正確に行っていますが、イベントを入力としてではなく、単なるリストとして受け取ります。を持っているEvent t [a]
ので、イベントを含むイベントを生成して切り替えることができると思いましたが、問題はzipListWithEven
モナドのコンテキストで動作するため、次のようになります。
Event t (m (Event t a))
これはswitch
プリミティブが受け入れないものです。
さて、おそらく私は間違った方法でアプローチしているので、ここに私の一般的な問題があります。座標のリストと tick イベントを生成するイベントが与えられた場合、座標に沿ってオブジェクトを移動するために「使用」できるイベントを生成したいと考えています。したがって、ティックが発火するたびに、位置が更新されます。そして、座標リストを更新するたびに、その新しいリストから位置を生成し始めます。