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

Haskell代码在不应用参数的情况下如何工作?,haskell,Haskell,我遇到了以下Haskell代码: trafficController :: Double -> Picture trafficController t | round (t/3) `mod` 2 == 0 = trafficLight True | otherwise = trafficLight False main :: IO () main = animationOf trafficController 我跑了,它成功了。但怎么可能因为“t”参数

我遇到了以下Haskell代码:

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

main :: IO ()
main = animationOf trafficController

我跑了,它成功了。但怎么可能因为“t”参数从未应用过呢

t参数确实从未明确应用过。但是,您的说法是正确的,
trafficController
需要应用
t
,才能工作。有什么好处

在这种情况下,函数的
动画是关键。让我们看看它的类型:

animationOf::(双击->图片)->IO()

我们可以看到,
animationOf
将函数作为其第一个参数。大概,
animationOf
的实现采用此函数,计算出要使用的正确的
Double
,将此值应用于函数,然后在屏幕上绘制生成的
图片。(因为这是一个动画,它可能会执行多次。)因此,即使您从未明确应用该参数,
animationOf
也会为您执行该操作。

当然
animationOf
实现会在某个地方应用它。函数是一流的值:它们可以作为参数传递,作为结果返回,放入配对/列表/其他容器等。您不必在每次提到某个函数时立即应用它。