Haskell帮忙.和$

Jus*_*tin 6 haskell function composition

例如,请执行以下操作

type Row a = [a]
type Table a = [Row a]

mapTable :: (a -> b) -> Table a -> Table b
mapTable = map . map

notTable :: Table Bool -> Table Bool
notTable = map . map $ (not)
Run Code Online (Sandbox Code Playgroud)

为什么,如果我从notTable中删除$,它会停止工作吗?

我已经向自己解释了几次,但它永远不会坚持下去,我需要一段时间才能推断出最新情况.我知道$基本上确保$的每一方都被单独评估,因为$具有最低优先级,但是如果我拉出$,这为什么会中断?

谢谢

Joe*_*ams 10

你的优先权是正确的:.是infixr 9(9是最高的),而$infixr是0(0是最低的).有关操作员固定性表,请参阅Haskell报告.

但是,功能应用程序具有比任何运算符更高的优先级,甚至..因此:

map . map $ (not)
Run Code Online (Sandbox Code Playgroud)

变为:

(map . map) $ (not)
Run Code Online (Sandbox Code Playgroud)

map . map (not)
Run Code Online (Sandbox Code Playgroud)

变为:

map . (map not)
Run Code Online (Sandbox Code Playgroud)

  • 尝试进入ghci并执行":type map.(map not)"以及此处的其他变体. (2认同)