【发布时间】:2022-01-14 15:36:45
【问题描述】:
我想从 C/C++ 返回一个任意等级的数组给 Idris。我将 C++ 数组键入为 void*,并在 Idris 中相应地有一个 AnyPtr。在 Idris 中,我将这种 Array 类型定义为嵌套的 Vect:
Shape : {0 rank: Nat} -> Type
Shape = Vect rank Nat
Array : (0 shape : Shape) -> Type
Array [] = Int
Array (d :: ds) = Vect d (Array ds)
但我不知道如何将AnyPtr 转换为Array。我已经到了
%foreign "C:libfoo,eval"
prim__eval : AnyPtr
export
eval : Array shape
eval = prim__eval -- doesn't type check
编辑我将元素类型固定为Int,因为它简化了问题而不会丢失重要的细节。
【问题讨论】: