([Char], t) *Main> :-6ren">
gpt4 book ai didi

Haskell 的 Pairs 类型

转载 作者:行者123 更新时间:2023-12-05 08:17:37 25 4
gpt4 key购买 nike

我正在尝试理解 Haskell 的类型系统。我遇到了以下情况:

*Main> :t ("Hello", 4)
("Hello", 4) :: Num t => ([Char], t)

*Main> :t ("Hello", 'a')
("Hello", 'a') :: ([Char], Char)

*Main> :t ("Hello", True)
("Hello", True) :: ([Char], Bool)

为什么 ("Hello", 4) 的类型不像其他类型那样表示。我原以为它是 ("Hello", 4)::([Char], Num)

我之前已经看过 => 了。我想知道的是,为什么会产生这种差异?

最佳答案

那是因为 Num 不是类型;这是一个typeclass , 而 Num t => someType 表示 t 是某种任意类型,它是 Num 类型类的一个实例。借用一些 Java/C# 术语,您可以将 Num 视为接口(interface),而 Num t => t 是具有 t< 约束的泛型类型 必须实现 Num 接口(interface)。

通常,您会在 => 箭头的左侧找到类型类约束,在右侧找到类型主体。我们可以有多个类约束,例如 (Num a, Num b) => (a, b),它表示两个任意数字类型的元组的类型。我们也可以有零类约束,在这种情况下 => 被省略。

在 Haskell 中,数字文字可以表示作为 Num 实例的任何类型。文字 4 可以表示一个 float 或一个整数,或者(如果您定义了一些更奇特的实例)甚至一个函数。

关于Haskell 的 Pairs 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22073585/

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