如何编写没有参数的Haskell函数的类型声明?

时间:2014-01-08 22:26:30

标签: haskell

如何编写没有参数的haskell函数的类型声明?

2 个答案:

答案 0 :(得分:44)

没有没有参数的函数,这只是一个值。当然,你可以写下这样的声明:

five :: Int
five = 5

如果我做的话,它可能看起来更像你要求的

five' :: () -> Int
five' () = 5

但这完全相同(除非你写了像five' undefined这样荒谬的东西)和superfluent 1

如果您的意思是类似的话,在C

void scream() {
  printf("Aaaah!\n");
}
然后,这又不是一个功能,而是一个动作。 (C程序员确实称它为函数,但你最好说 procedure ,每个人都会理解。)我上面所说的几乎一样,你用的是

scream :: IO()
scream = putStrLn "Aaaah!"

请注意,在这种情况下,空()与没有参数(由于缺少->箭头已经存在)没有任何关系,相反,它意味着也没有返回值,它只是一个"只有副作用"动作。

<小时/> 1 实际上,它在一个相关方面有所不同:fiveconstant applicative form,这意味着它被记忆了。如果我以某种迂回方式定义了这样的常量(例如sum $ 5 : replicate 1000000 0),那么即使在程序运行期间多次评估five,也只执行一次冗长的计算。 OTOH,无论你在哪里写出five' (),计算都会重新进行。

答案 1 :(得分:9)

由于Haskell中的函数是纯的(它们的结果仅取决于它们的参数),所以没有参数的函数的等价物只是一个值。例如,one = 1