我遇到了以下Haskell代码:
trafficController :: Double -> Picture
trafficController t
| round (t/3) `mod` 2 == 0 = trafficLight True
| otherwise = trafficLight False
main :: IO ()
main = animationOf trafficController
Run Code Online (Sandbox Code Playgroud)
我跑了,它奏效了。但是,怎么可能从未应用过“ t”参数呢?
t实际上,从未明确应用该参数。但是,你是在说正确的trafficController需求t,以便适用于工作。是什么赋予了?
在这种情况下,animationOf功能是关键。让我们看一下它的类型:
animationOf :: (Double -> Picture) -> IO ()
Run Code Online (Sandbox Code Playgroud)
我们可以看到animationOf以函数为第一个参数。大概,执行animationOf此功能,找出正确Double的使用方法,将此值应用于该功能,然后Picture在屏幕上绘制结果。(由于这是动画,因此它可能会执行多次。)因此,即使您从未显式应用参数,animationOf也可以为您执行。