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