Haskell代码如何在不应用参数的情况下工作?

时间:2019-07-28 02:09:39

标签: haskell

我遇到了以下Haskell代码:

trafficController :: Double -> Picture
trafficController t
 | round (t/3) `mod` 2 == 0 = trafficLight True
 | otherwise                = trafficLight False

main :: IO ()
main = animationOf trafficController

我跑了,它奏效了。但是,怎么可能从未应用过“ t”参数呢?

1 个答案:

答案 0 :(得分:9)

实际上t参数从未显式应用。但是,您正确地说trafficController需要应用t才能正常工作。有什么作用?

在这种情况下,animationOf功能是关键。让我们看一下它的类型:

animationOf :: (Double -> Picture) -> IO ()

我们可以看到animationOf将函数作为其第一个参数。假定animationOf的实现采用了此功能,找出了要使用的正确Double,将此值应用于该功能,然后在屏幕上绘制了生成的Picture。 (由于这是动画,因此它可能会多次执行。)因此,即使您从未显式应用参数,animationOf也会为您执行。