Functional programming 是`有趣的x->;x`唯一具有类型';a->';一个用OCaml写的?

Functional programming 是`有趣的x->;x`唯一具有类型';a->';一个用OCaml写的?,functional-programming,ocaml,Functional Programming,Ocaml,题目很简单,就是这个问题 标识函数funx->x的类型为'a->'a 是否有任何其他功能具有相同类型的'a->'a? 我想不出别的了。不 fun x -> print_endline "foo"; x;; (failwith "bang" : 'a -> 'a);; (fun x -> failwith "bang" : 'a -> 'a);; (fun x -> List.hd [] : 'a -> 'a);; let rec f (x : 'a)

题目很简单,就是这个问题

标识函数
funx->x
的类型为
'a->'a

是否有任何其他功能具有相同类型的
'a->'a

我想不出别的了。

fun x -> print_endline "foo"; x;;

(failwith "bang" : 'a -> 'a);;

(fun x -> failwith "bang" : 'a -> 'a);;

(fun x -> List.hd [] : 'a -> 'a);;

let rec f (x : 'a) : 'a = f x;;

let counter = ref 0;;
(fun x -> incr counter; x);;

identity函数是total编程语言中
'a->'a
的唯一驻留函数,没有任何副作用,包括非终止。OCaml和Haskell都不符合条件,但一些用作证明助手的语言(在这种情况下,总体性很重要)符合条件,特别是Coq(它具有用于表示此类型的非指示性多态性)。

部分函数应用程序也可以提供任意数量的证明助手,对吗?如果你有'b->'a->'a,并将其应用于'b,你会得到'a->'a@plinth:你必须这样做,但一定要这样做。然而,我不认为这有什么区别:我的意思是你可以自己计算应用程序的结果,你会得到一个可以直接表达为
'a->'a
的封闭程序,类似于我上面给出的那些程序。