Haskell定义了类型

时间:2017-09-16 19:24:19

标签: haskell types

研究Haskell的第一原理。 Haskell的绝对初学者。 如果:

data A
data B
func :: A -> B
func = undefined

实际功能是什么?虽然工作量很大,但效果很好(也谢谢你),但我又被卡住了。 A - > B表示两种不同的类型,如'String' - > “字符”?只是试图绕过它。

2 个答案:

答案 0 :(得分:5)

不,(具体)类型以大写开头。因此A -> B表示您使用A表达式定义的Bdata A = ...类型(此处未定义),例如:

data A = Foo | Bar Int | Qux String A

如果签名包含小写的标识符,则它是类型变量。例如foo :: a -> b,意味着ab可以被任何类型替换。因此,foo是一个函数,可以是A -> B,也可以是A -> IntChar -> BChar -> Int

您还可以在签名中添加类型约束,以限制可以使用ab的类型。与foo :: (Show a, Num b) => a -> b限制ab一样,instance Show ainstance Num b类型应该存在ab这样就定义了foo

答案 1 :(得分:-1)

谢谢Willem,Chepner。你的回答让我想起了:

data A
data B
funcAJ :: A -> B
funcAJ a = a
       where a = b
             b = undefined

这个类型为funcAJ :: A - > B,我明白了。非常感谢!