在 Haskell 类型签名中,“a” 和 “t” 两种类型有区别吗,还是只是不同的指定,就像类型 “a” 和类型 “b” 一样?
在 https://www.haskell.org/tutorial/goodies.html 中,类型 [a] 的定义如下:
[a] 是类型族,由每种类型 a 组成,表示 a 类型的列表。整数列表(例如 [1,2,3])、字符列表(['a','b','c'])甚至是整数列表的列表等都是该族的成员。(但请注意,[2,'b'] 不是一个有效的示例,因为没有单个类型包含 2 和 'b'。)
这个定义是否也适用于类型 “t”?
以下是一个例子:
在 https://www.haskell.org/tutorial/goodies.html 中,类型 [a] 的定义如下:
[a] 是类型族,由每种类型 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]
n
表示数字等。 - Willem Van Onsemfoldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
相当于foldl :: Foldable x => (y -> z -> y) -> y -> x z -> y
,以及app :: [t] -> t -> [t]
相当于app :: [u] -> u -> [u]
可能会有所帮助。 - TobiMcNamobi