Идрис-JS Рекурсивные типы - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь экспортировать «Функции сигналов» (стиль Ямпа) из Идриса в 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 могли обрабатывать рекурсивные типы, то все было бы в порядке, но это не так.

Я продолжаю думать, чтоможет быть как-то иначе - есть?

...