Ang*_*nes 1 haskell types ghci
我正在尝试理解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)
Run Code Online (Sandbox Code Playgroud)
为什么类型("Hello", 4)不像其他类型那样表示.我原以为是("Hello", 4) :: ([Char], Num)
我=>之前已经看过了.我想知道的是,为什么它会产生这种差异?
And*_*ács 11
那是因为Num不是一种类型; 它是一个类型类,Num t => someType意味着它t是一些任意类型,它是Num类型类的一个实例.借用一些Java/C#术语,您可以将其Num视为一个接口,并且Num t => t是具有t必须实现Num接口的约束的泛型类型.
通常,您会在=>箭头左侧找到类型类约束,在右侧找到类型主体.例如(Num a, Num b) => (a, b),我们可以有多个类约束,它们表示两个任意数字类型的元组的类型.我们也可以有零类约束,在这种情况下=>省略.
在Haskell中,数字文字可以表示作为实例的任何类型Num.文字4可以表示浮点数或整数,或者(如果你定义一些更奇特的实例)甚至是函数.
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |