Я пытаюсь экспортировать «Функции сигналов» (стиль Ямпа) из Идриса в JS.
Для этого мне нужно что-то, что может вести себя как signal: i -> (signal, o)
, взяввход i
и вывод o
вместе со следующей версией самого себя.Это определение рекурсивно.
У меня есть определение data
, подобное этому;
> data SF : Type -> Type -> Type where
> Flat : (i -> o) -> SF i o
> Bump : (i -> (SF i o, o)) -> SF i o
>
> react: SF i o -> i -> (SF i o, o)
... с основной предпосылкой, что signal i o = i -> (signal i o, o)
Я хочувызовите мою сигнальную функцию с входом i
и создайте как выход o
, так и следующую версию сигнальной функции.
НО
Я не могупридумать сигнатуру типа, которая работает для передачи в FFI.Мне неизбежно нужно signal i o
в обе стороны, и вызов foreign FFI_JS ...
, кажется, рекурсивно оценивает рекурсивные типы.
Если бы я мог пройти и принять data
через вызовы foreign FFI_JS ...
, тогда я был бы в порядке,но я не могу.
Если бы генераторы функций foreign
могли обрабатывать рекурсивные типы, то все было бы в порядке, но это не так.
Я продолжаю думать, чтоможет быть как-то иначе - есть?