研究Haskell的第一原理。 Haskell的绝对初学者。 如果:
data A
data B
func :: A -> B
func = undefined
实际功能是什么?虽然工作量很大,但效果很好(也谢谢你),但我又被卡住了。 A - > B表示两种不同的类型,如'String' - > “字符”?只是试图绕过它。
答案 0 :(得分:5)
不,(具体)类型以大写开头。因此A -> B
表示您使用A
表达式定义的B
和data A = ...
类型(此处未定义),例如:
data A = Foo | Bar Int | Qux String A
如果签名包含小写的标识符,则它是类型变量。例如foo :: a -> b
,意味着a
和b
可以被任何类型替换。因此,foo
是一个函数,可以是A -> B
,也可以是A -> Int
,Char -> B
和Char -> Int
。
您还可以在签名中添加类型约束,以限制可以使用a
和b
的类型。与foo :: (Show a, Num b) => a -> b
限制a
和b
一样,instance Show a
和instance Num b
类型应该存在a
和b
这样就定义了foo
。
答案 1 :(得分:-1)
谢谢Willem,Chepner。你的回答让我想起了:
data A
data B
funcAJ :: A -> B
funcAJ a = a
where a = b
b = undefined
这个类型为funcAJ :: A - > B,我明白了。非常感谢!