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

时间:2019-10-27 19:43:09

标签: haskell functional-programming

这个问题是关于Haskell函数的理论问题,该函数可以接受任何类型的参数。具有

类型签名的函数方式之间有区别吗
a -> b -> a 

c -> a -> c 

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

2 个答案:

答案 0 :(得分:17)

没有区别。由于abc小写字母开头,因此它们是变量。您可以重命名变量,只要两个(或多个)变量不“ 冲突”,就可以重命名。

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

答案 1 :(得分:16)

不。将a -> b -> a视为This Type -> Another Type -> This Type。然后它们都适合给定的模式。但是,类似a -> b -> c的内容不适合:This Type -> That Type -> Yet Another Type(通常)是不同的;除了边缘情况c = a以外,它会产生您感兴趣的图案。