首页 > 解决方案 > 为什么 lambda 的类型推断与标准声明不同?

问题描述

在 GHCI 中,如果我使用:t以下每个函数,它们会有所不同。

:t test(Ord p, Num p) => p -> p -> p

:t testAsLambdaInteger -> 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)

标签: haskell

解决方案


推荐阅读