是有趣的x - > x`是唯一具有'a - >类型的函数在OCaml?

时间:2013-01-17 14:25:38

标签: functional-programming ocaml

标题是简单的问题。

身份函数fun x -> x的类型为'a -> 'a

是否还有其他类型'a -> 'a

的函数?

我想不出另一个。

1 个答案:

答案 0 :(得分:15)

没有

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);;

身份函数是总编程语言中'a -> 'a的唯一居民,没有任何副作用,包括不确定。 OCaml和Haskell都没有资格,但是一些语言用作证明助手(这个整体很重要),特别是Coq(具有用于制定这种类型的不可预测的多态性)。