我在尝试理解 Haskell 如何确定函数类型时感到有点困惑。这是一个例子:
boolFcn x y = x/=3 && y/=4
当我检查上述函数的类型时,它给出了结果:
(Num a1, Num a, Eq a1, Eq a) => a -> a1 -> Bool
这是另一个例子:
triangles = [ (a,b,c) | c <- [1..10], b <- [1..10], a <- [1..10] ]
并申请:t
on triangles
结果:
(Num t2, Num t1, Num t, Enum t2, Enum t1, Enum t) => [(t, t1, t2)]
我脑子里出现了一些问题,但我自己很难解决:
- 为什么 boolFcn 的类型由以下组成
a, a1
文字,而三角形的类型包括t,t1
文字?有什么区别吗a
and t
?
-
为什么这个 boolFcn 类型不能简化为:
(Num a, Eq a) => a -> a -> Bool
a
and a1
具有相同的类型类,那么为什么我不能简单地使用一个来编写它们a
?当我检查函数的类型时:
let sumthis x y = if x > y then x+y else x-y
我得到一个结果:
(Ord a, Num a) => a -> a -> a
为什么它没有导致:
(Ord a, Num a, Ord a1, Num a1) => a -> a1 -> a
如果这个问题很微不足道,我很抱歉,尽管我很乐意听到对此问题的任何解释/提示。