我正在尝试将“信号功能” (Yampa style)从Idris导出到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
函数生成器可以处理递归类型,那我很好,但事实并非如此。
我一直认为必须采取其他解决办法-在那里吗?