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)