gpt4 book ai didi

haskell - 为什么 `:type` 有时会显示 `a` 而有时会显示 `t` ?

转载 作者:行者123 更新时间:2023-12-03 14:50:32 27 4
gpt4 key购买 nike

我有这两个功能:

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 之外没有其他名称与统一。

关于haskell - 为什么 `:type` 有时会显示 `a` 而有时会显示 `t` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34182174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com