gpt4 book ai didi

haskell 函数签名

转载 作者:行者123 更新时间:2023-12-02 02:51:12 24 4
gpt4 key购买 nike

我对haskell中的类型签名有疑问。阅读有关应用仿函数的内容,我发现:

pure (+) <*> Just 3 

返回 Just (+3)类型为 Maybe (a->a) .现在签名 <*>
 (<*>) :: Applicative f => f (a -> b) -> f a -> f b

这意味着我们的 f b在上面的例子中是通过替换 f 获得的与 Maybeba->a .

在这里我有点惊讶,因为据我所知, b无法统一(对不起,如果我没有使用指定的术语,但我希望它们足够清楚)与 a->a .

这可能只是因为我们在内部和应用仿函数还是我缺少的其他东西?

最佳答案

b是一个(n 无约束)类型变量,因此它可以与每种类型统一,始终。与Applicative无关仿函数,它适用于类型变量必须与类型统一的任何地方。

粗略地说,统一两个类型表达式会产生最通用的类​​型表达式,它不比统一的任一伙伴更通用。如果这两种类型的表达式中的一种比另一种更一般,则统一总是成功并导致统一的更具体的合作伙伴。所有类型表达式中最通用的是一种完全没有任何结构的类型变量。因此,通过用该类型表达式实例化类型变量,可以将类型变量与任何类型表达式统一(假设种类匹配,种类为 * 的类型变量当然不能与类型表达式 Maybe 统一是 * -> * )。

关于haskell 函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14583197/

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