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

him*_*ami -1 haskell

我遇到了以下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”参数呢?

bra*_*drn 9

t实际上,从未明确应用该参数。但是,你是在说正确的trafficController需求t,以便适用于工作。是什么赋予了?

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

animationOf :: (Double -> Picture) -> IO ()
Run Code Online (Sandbox Code Playgroud)

我们可以看到animationOf以函数为第一个参数。大概,执行animationOf此功能,找出正确Double的使用方法,将此值应用于该功能,然后Picture在屏幕上绘制结果。(由于这是动画,因此它可能会执行多次。)因此,即使您从未显式应用参数,animationOf也可以为您执行。