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

Dre*_*ana 16 haskell functional-programming

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

a -> b -> a 
Run Code Online (Sandbox Code Playgroud)

c -> a -> c 
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*sem 17

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

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


Ser*_*bov 16

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