我有这两个功能:
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
统一之外没有其他名称.