6

我在PureScript 程序中看到过这段代码,它有什么作用<<<

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

1 回答 1

11

<<<从右到左的合成运算符。它相当于.在 Haskell 中。它是这样工作的:

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

也就是说,如果你有两个函数1并且你放在<<<then 之间,你会得到一个新函数,它调用第一个函数,结果调用第二个函数。

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

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 中也适用于 category 或 semigroupoids

于 2015-04-26T18:26:17.317 回答