三重小于号 (`<<<`) 在 PureScript 中有什么作用?

What does the triple less-than sign (`<<<`) do in PureScript?

我在 a PureScript program 中看到过这段代码,<<< 有什么作用?

pinkieLogic :: (Tuple Boolean GameObject) -> GameObject -> GameObject
pinkieLogic (Tuple jumpPressed hater) p =
  hated hater p
  (solidGround
   <<< gravity
   <<< velocity
   <<< jump jumpPressed
   <<< clearSound)

<<<就是right-to-left composition operator。它相当于 Haskell 中的 .。它是这样工作的:

(f <<< g) x = f (g x)

也就是说,如果您有两个函数1,然后在它们之间放置 <<<,您将得到一个新函数,它调用第一个函数并返回结果调用第二个函数。

因此,该代码可以重写如下:

pinkieLogic :: (Tuple Boolean GameObject) -> GameObject -> GameObject
pinkieLogic (Tuple jumpPressed hater) p =
  hated hater p
  (\x -> solidGround (gravity (velocity (jump jumpPressed (clearSound x)))))

[1] 与 Haskell 的 . 运算符不同,PureScript 中的 <<< also works on categories or semigroupoids.