【发布时间】:2013-12-01 16:59:14
【问题描述】:
我一直在使用 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 的函数,并且in 本身是 fs 和 fs 本身的参数的来源。我想得到一个可以处理输入并根据这些输入动态改变其行为(构成它的信号函数)的电路。
一方面,在我看来sf 实际上不可能是app,因为在这种情况下我们没有ArrowApply;但另一方面,我认为可以通过某种形式的复杂切换来实现相同的行为。
【问题讨论】:
-
在知识渊博的人出现之前,我只建议幼稚的方法:
ArrowLoop给你想要的东西吗? -
我可以看到如果 SF 是 ArrowApply 的一个实例会如何,但否则我不会立即看到它有什么帮助。
-
您能否给出
sf的类型(以及两个Arrows 与&&&的组合)?我认为这将有助于我了解发生了什么。 -
我编辑了这个问题 - 如果还不清楚,请告诉我。