我有以下两个功能:
cleanUp a = Data.List.filter (/=[]) a
joinByPairs [] = []
joinByPairs (x:[]) = (x:[])
joinByPairs (x:y:xs) = (x ++ y) : joinByPairs xs
当我将它们加载到
ghci
中,并在它们上调用:type
时,我得到以下结果:*Main> :type joinByPairs
joinByPairs :: [[a]] -> [[a]]
*Main> :type cleanUp
cleanUp :: Eq t => [[t]] -> [[t]]
显示
a
与t
的逻辑是什么?我不认为这是因为Eq t
部分,因为我还有其他函数可以显示类似otherFunction :: Eq a => [[a]] -> [[a]]
的内容。 最佳答案
这是因为选择了类型变量名称的方式。全新变量获取t
。在类型签名中命名的类型变量将保留类型签名中的名称。在统一类型变量时,GHC倾向于保留来自显式类型签名的名称。如果没有子表达式具有显式类型签名,则除了t
之外,没有其他名称可以与之结合。