我试图更好地理解OCaml类型推断.我创建了这个例子:
let rec f t = match t with
| (l,r) -> (f l)+(f r)
| _ -> 1
Run Code Online (Sandbox Code Playgroud)
并且我想将它应用于任何具有嵌套对的二进制元组(对),以获得叶子的总数.示例:f((1,2),3)
函数f拒绝编译,因为(fl)类型中的矛盾:"此表达式具有类型'a但是表达式需要类型'a*'b".
问题:'a是任何类型,也不能是一对,或者由_ case处理?是否有任何方法来处理任意深度的元组而不将它们转换为其他数据结构,例如变体?
PS:在C++中,我会通过创建两个模板函数"f"来解决这类问题,一个用于处理元组和另一个类型.