我遇到了以下Haskell代码:
trafficController :: Double -> Picture
trafficController t
| round (t/3) `mod` 2 == 0 = trafficLight True
| otherwise = trafficLight False
main :: IO ()
main = animationOf trafficController
我跑了,它奏效了。但是,怎么可能从未应用过“ t”参数呢?
答案 0 :(得分:9)
实际上t
参数从未显式应用。但是,您正确地说trafficController
需要应用t
才能正常工作。有什么作用?
在这种情况下,animationOf
功能是关键。让我们看一下它的类型:
animationOf :: (Double -> Picture) -> IO ()
我们可以看到animationOf
将函数作为其第一个参数。假定animationOf
的实现采用了此功能,找出了要使用的正确Double
,将此值应用于该功能,然后在屏幕上绘制了生成的Picture
。 (由于这是动画,因此它可能会多次执行。)因此,即使您从未显式应用参数,animationOf
也会为您执行。