我有以下两个功能:
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
vs的逻辑是什么t
?我不认为这是Eq t
部分原因,因为我还有其他显示类似的功能otherFunction :: Eq a => [[a]] -> [[a]]
。
这是因为选择了类型变量名称的方式。全新的变量get t
。在类型签名中命名的类型变量会保留类型签名中的名称。统一类型变量时,GHC倾向于保留来自显式类型签名的名称。如果没有子表达式具有显式类型签名,则除了t
与之统一以外,没有其他名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句