为什么只有一个可能的* id *函数实现?

时间:2013-03-02 07:45:42

标签: types language-agnostic proof

我已经多次看到声称可以证明具有类型签名的函数

的声明
α → α

只能通过返回参数来实现,因为我们对参数的类型一无所知。

id :: α → α
id a = a

可以在http://blog.precog.com/?p=431

找到该声明的例子

但是什么阻止我们制作像这样的if语句(伪代码)?

id :: α → α
id a = if ( a is_a_String) a + "hello"
       else a

我缺少一个先决条件吗?

1 个答案:

答案 0 :(得分:2)

这样的定理仅适用于具有 parametricity 属性的语言。这意味着代码无法在运行时检查类型,因此,执行永远不能依赖于类型信息。大多数函数式语言都具有此属性,而OO语言通常会看到需要提供向下转换和类似功能,这会破坏参数。

Parametricity是一个非常强大的属性。它确保了某些抽象属性,所谓的"free theorems"就像你提到的那样,它是高效实现的推动者,可以在运行时擦除类型。

另见my answer here