假设我有一个像这样的代码片段:
type 'a mylist = | Nil | Cons of 'a * 'a mylist
let rec last l =
match l with
| Nil -> None
| Cons(x, Nil) -> Some(x)
| Cons(x, xs) -> last xs
Run Code Online (Sandbox Code Playgroud)
显然,这个模式匹配mylist-Nil和的构造函数Cons。我的问题是你将如何实施这样的事情。你不能只提供值,Cons直到找到一些匹配的值l,所以我假设 OCaml 编译器实现了类似“反向构造函数”的东西,它接受类型的值mylist并尝试将其转换为组成部分?
例如,在 psudo-ocaml 中:
type 'a mylist = | Nil | Cons of 'a * 'a mylist
Cons : ('a * 'a mylist) -> 'a mylist
UnCons : 'a …Run Code Online (Sandbox Code Playgroud) 我有一组 haskell 类型签名,类似于下面:(对于任何了解 haskell 的人来说,这是 的单态版本..)
(t2 -> t3) -> (t1 -> t2) -> t1 -> t3
Run Code Online (Sandbox Code Playgroud)
并使用隐式括号(方便地,这就是我的程序当前存储类型签名的方式 - 作为树。):
(t2 -> t3) -> ((t1 -> t2) -> (t1 -> t3))
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种编程方法来将这种风格的类型签名转换为带有函数指针的 C 风格类型签名。到目前为止,我所能找到的只是有关一层(也许是两层)函数指针的资源 - 显然,在这种情况下,我需要它支持理论上无限的层。任何资源或指示都会有帮助。
先感谢您。
编辑:将类型编码为 C 数据结构也可以。