Haskell类型签名中的两种类型“a”和“t”之间是否存在任何差别,或者它只有类型“a”和类型“b”的不同名称?Haskell类型签名中类型“a”和类型“t”之间的区别是什么?
在 https://www.haskell.org/tutorial/goodies.html类型并[a]被定义为如下:
并[a]是组成的类型的家庭,对于每个类型,的列表的 类型。整数列表(例如[1,2,3]),字符列表 (['a','b','c']),甚至整数列表等等,都是 这个成员家庭。 (注意,然而,[2,“B”]是不是一个有效 例子中,由于有一个包含两个2和“b”没有单一的类型。)
是该定义也适用于类型为“ t“?
的例子可能是:
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
app :: [t] -> t -> [t]
这取决于签名中是否存在与这些符号匹配的类型限制。显示有问题的签名。 – Carcigenicate
不,如果类型变量不在类型约束中出现,这些只是变量。这些变量的名称是任意的。但有时候更多的语义名称可能会有用。像数字的'n'等 –
不是一个完整的答案,但它可能有助于知道'foldl :: Foldable t =>(b - > a - > b) - > b - > ta - > b'是等价的到'foldl :: Foldable x =>(y - > z - > y) - > y - > xz - > y'和'app :: [t] - > t - > [t]'相当于'app :: [u] - > u - > [u]' – TobiMcNamobi