在范畴论中,可以证明身份函数是唯一的。还可以说,根据参数推论,类型forall a. a -> a
只有一个居民。不过在Haskell中,我可以想到身份函数的更多实现:
id x = x
id x = fst (x, "useless")
id x = head [x]
id x = (\x -> x) x
id x = (\x -> (\x -> x) x) x
[当存在多个实现时,如何理解“身份函数是唯一的”和“ forall a. a -> a
类型的任何函数只有一个居民”的说法?
这些人对我来说就像是一个单一的居民。为了表明它们是不同的,请尝试构造其行为不同的输入。如果不能,则实际上它们必须是同一功能,但实现方式不同。