Haskell中的函数模式匹配

时间:2016-01-20 10:23:26

标签: haskell

我正在尝试在了解你一个Haskell 的指导下学习Haskell,但以下让我感到困惑。

lucky :: (Integral a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"  
lucky x = "Sorry, you're out of luck, pal!"

正如你所看到的那样,有一行说明了函数的确切类型。但这有必要吗?不能从该行下面的模式中推导出参数类型和返回值吗?

2 个答案:

答案 0 :(得分:6)

你是对的,绝对没有必要。但是,由于至少有两个原因,这是一种非常常见的做法,即说明功能的类型:

  • 告诉编译器你的意思。如果您在编写函数时出错,编译器将不会推断出错误类型,但会警告您错误
  • 告诉阅读您代码的人。在理解代码时,他们必须找出函数的类型,所以你不妨让它们更容易。明确地使类型使代码更具可读性。

这就是为什么尽管它们是可选的,但顶层函数的类型几乎总是在Haskell代码中拼写出来。

要完成Zeta所说的,在这种情况下没有必要。但是,在某些情况下,当代码太不明确而无法推断时,有必要指定函数的类型。

答案 1 :(得分:-2)

出于文档目的,并且因为某些类型扩展,自动推断失败。阅读here