2

私は Haskell (特に Yampa) で Arrowized FRP ライブラリをいじっていますが、「継続的な」切り替えを行う方法がよくわかりません。sfつまり、信号は、それ自体が信号である信号関数 (以下) を通過することを意味します (画像の上半分に描かれているように)。

連続スイッチング

スイッチのパラメータがどうなるか前もってわからないので、これを単純なバイナリ スイッチに減らす方法がわかりません。

可能であれば、どのようにすればよいのでしょうか。私は Yampa コードの方が好きですが、Arrowized FRP コードであれば何でも構いません。これらの場合に同じ混乱が生じるかどうかを知るために、他のライブラリ(SodiumやReactive Bananaなど)を試したことはありませんが、それらについても興味があります.

編集

これをより明確にするために、画像にラベルを付けました。ラベルの可能なタイプは次のとおりです。

  • :Either Int (Int -> Int)

  • 1 : (Int -> Int) -> (Either Int (Int -> Int) -> (Int -> Int))

  • sf 次のようになります。

(Either Int (Int -> Int) -> (Int -> Int)) -> Either Int (Int -> Int) -> (Int -> Int)

(例: app)。ただし、それは疑問符の付いた部分が への入力を表している場合のみですsf。より複雑なスイッチを表す場合、タイプは次のようになります。

(Either Int (Int -> Int) -> (Int -> Int)) -> (Int -> Int)

代わりは。

  • 2outはほとんど無関係です。

に適用される関数を表すラベルの付いた信号を使用し、それ自体がsへの引数と s 自体の両方のソースであることで、回路がである のように動作するようにするという考えです。入力を処理し、それらの入力に基づいてその動作 (それを構成する信号関数) を動的に変更できる回路を取得したいと考えています。sfappfininff

一方では、この場合には;がないsfので、実際には ではないように思えます。しかし一方で、何らかの洗練された切り替えで同じ動作を実現できると思います。appArrowApply

4

2 に答える 2

1

私はまだそれがの場合だと思いますArrowLoop

あなたが持っている

in :: Arr () A
sf :: Arr (A -> B, A) B
one :: Arr B (A -> B)
two :: Arr B C

sfはちょうどarr (uncurry ($))です。

次に、持っていてsf >>> (one &&& two) :: Arr (A -> B, A) (A -> B, C)、使用してloop(またはむしろ慎重に配置して) を取得できloopます。arr swapArr A C

それはあなたが望むものをあなたに与えますか?

于 2013-11-20T22:29:13.957 に答える