Я играл с библиотеками Arrowized FRP в Haskell (в частности, Yampa), но я не могу понять, как сделать «постоянное» переключение. Под этим я подразумеваю, что сигнал проходит через сигнальную функцию (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)
вместо.
- 2 и out практически не имеют значения.
Идея состоит в том, что я хочу, чтобы схема вела себя как если бы sf
была app
, с сигналом, помеченным f
, представляющим функцию, которая применяется к in
, и с самим in
, являющимся источником обоих аргументов для f
s. , и сами f
. Я хочу получить схему, которая может обрабатывать входные данные и динамически изменять свое поведение (сигнальные функции, которые его составляют) на основе этих входных данных.
С одной стороны, мне кажется, что sf
на самом деле не может быть app
, так как в данном случае у нас нет ArrowApply
; но, с другой стороны, я полагаю, что такое же поведение может быть достигнуто с помощью некоторой формы сложного переключения.
ArrowLoop
дает ли вам то, что вы хотите? - person Tom Ellis   schedule 18.11.2013sf
(а также то, что выглядит как дваArrow
в сочетании с&&&
)? Думаю, это помогло бы мне понять, что происходит. - person Tom Ellis   schedule 20.11.2013