Haskell咖喱简单示例

时间:2018-06-28 11:55:12

标签: haskell currying

我已经定义了一个函数minCurr:

minCur a = (\b -> if a > b then b else a)

询问minCur的类型时,我会得到

minCur :: Ord a => a -> a -> a

我期望的是类似的东西

minCur :: Ord a => a -> (a->a)

这是为什么?

2 个答案:

答案 0 :(得分:2)

a -> b -> ca -> (b -> c)完全相同。打印类型时,括号会被省略以提高可读性。

(a -> b) -> c总是打印括号,否则可能会与其他类型混淆。

答案 1 :(得分:2)

在Haskell中,->是我们所说的“正确关联”,这意味着这两件事是等效的:

foo :: a -> (b -> c)
foo :: a -> b -> c

换句话说,当编译器看到minCur :: Ord a => a -> a -> a时,它会按预期读取minCur :: Ord a => a -> (a -> a)。因此,您的期望是正确的,实际上没有实现。

这样做是为了提高可读性和易于编写性,因为每次需要新的论点时都要放很多括号。