我正在尝试在了解你一个Haskell 的指导下学习Haskell,但以下让我感到困惑。
lucky :: (Integral a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"
lucky x = "Sorry, you're out of luck, pal!"
正如你所看到的那样,有一行说明了函数的确切类型。但这有必要吗?不能从该行下面的模式中推导出参数类型和返回值吗?
答案 0 :(得分:6)
你是对的,绝对没有必要。但是,由于至少有两个原因,这是一种非常常见的做法,即说明功能的类型:
这就是为什么尽管它们是可选的,但顶层函数的类型几乎总是在Haskell代码中拼写出来。
要完成Zeta所说的,在这种情况下没有必要。但是,在某些情况下,当代码太不明确而无法推断时,有必要指定函数的类型。
答案 1 :(得分:-2)
出于文档目的,并且因为某些类型扩展,自动推断失败。阅读here。