类型签名a-> b-> a和c-> a-> c之间有区别吗?


16

这个问题是有关Haskell函数的理论问题,该函数可以接受任何类型的参数。具有类型签名的功能方式之间有区别吗

a -> b -> a 

c -> a -> c 

被实例化?任何帮助表示赞赏。


6
不,您只需更改类型变量的名称。只要您不将变量重命名为另一个变量(例如,名称冲突),就不会有问题。
威廉·范·昂塞姆

取决于类型变量是否/如何绑定到其他位置。
Bergi

Answers:


17

没有区别。因为abc以a开头小写,这些都是变数。您可以重命名变量,只要两个(或多个)变量不“ 冲突 ” ,就可以重命名。

如果将变量重命名为与另一个变量相同的名称,或者将两个(或多个)变量重命名为相同的新名称,则可能发生这种冲突。如果ab在第一个代码片段中将变量重命名为例如,那么我们将得到b -> b -> b,但这并不相同,因为从那时起,我们强制第一个和第二个参数具有相同的类型。在您的类型签名中,我们可以自由选择两个相同的类型,但这不是必需的。


16

不。认为a -> b -> aThis Type -> Another Type -> This Type。然后它们都适合给定的模式。但是,有些不a -> b -> c适合:(This Type -> That Type -> Yet Another Type通常)不同;除了时的边缘情况c = a,它会产生您感兴趣的图案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.