我一直在使用 Haskell(尤其是 Yampa)中的 Arrowized FRP 库,但我不太清楚如何进行“连续”切换。我的意思是信号通过一个信号函数(sf
下图),该函数本身就是一个信号(如图上半部分所示)。
由于我不提前知道开关的参数是什么,所以我看不出如何将其简化为更简单的二进制开关。
如果可能的话,应该怎么做呢?我更喜欢 Yampa 代码,但对任何带箭头的 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)
反而。
- 2和out几乎无关紧要。
这个想法是我希望电路表现得好像 sf
是app
,标记的信号f
表示应用于 的函数in
,并且它本身是s 和s 本身in
的参数的来源。我想得到一个可以处理输入并根据这些输入动态改变其行为(构成它的信号函数)的电路。f
f
一方面,在我看来sf
,实际上不可能app
,因为在这种情况下,我们没有ArrowApply
; 但另一方面,我想通过某种形式的复杂切换可以实现相同的行为。