这个问题是关于Haskell函数的理论问题,该函数可以接受任何类型的参数。具有
类型签名的函数方式之间有区别吗a -> b -> a
和
c -> a -> c
被实例化了吗? 任何帮助表示赞赏。
答案 0 :(得分:17)
没有区别。由于a
,b
和c
以小写字母开头,因此它们是变量。您可以重命名变量,只要两个(或多个)变量不“ 冲突”,就可以重命名。
如果您重命名变量使其具有与另一个变量相同的名称,或者将两个(或多个)变量重命名为相同的新名称,则可能发生这种冲突。如果您在第一个代码片段中将变量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
以外,它会产生您感兴趣的图案。