haskell - 为什么 lambda 的类型推断与标准声明不同?
问题描述
在 GHCI 中,如果我使用:t
以下每个函数,它们会有所不同。
:t test
给(Ord p, Num p) => p -> p -> p
:t testAsLambda
给Integer -> Integer -> Integer
为什么使用 lambda 定义完全相同的函数会导致更严格的类型推断?
我知道将命名函数声明为这样的 lambda 可能很愚蠢;我只是想在这里推理 Haskell 的类型推断。
test x y =
let d = y - x in
if d > 0 then d
else 0
testAsLambda =
(\x y ->
let d = y - x in
if d > 0 then d
else 0)