Haskell的$ -Operator的定义

Lak*_*ryt 2 haskell definition

这个职位和其他来源,如这样坚持,$ -运算符的定义

($) :: (a -> b) -> a -> b
f $ x = f x
Run Code Online (Sandbox Code Playgroud)

要么

($) f x = f x
Run Code Online (Sandbox Code Playgroud)

要么

($) = id
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么这个定义能够替换括号,所以我试图通过定义:自己重现并检查行为,

k :: (a -> b) -> a -> b
k f x = f x
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

-- these work:
(+2) `k` 4
(+2) `id` 4
sum `k` [1,2]
sum `id` [1,2]
map (flip(-)3) $ filter even `k`  filter (>=0) [-5..10]
map (flip(-)3) $ filter even `id` filter (>=0) [-5..10]

-- these don't:
sum `k`  1:[2]
sum `id` 1:[2]
map (flip(-)3) `id` filter even $ filter (>=0) [-5..10]
Run Code Online (Sandbox Code Playgroud)

k应该替代$?我究竟做错了什么?

mel*_*ene 9

您错过了固定声明:

infixr 0 $
Run Code Online (Sandbox Code Playgroud)

或者在你的例子中:

infixr 0 `k`
Run Code Online (Sandbox Code Playgroud)

Fixity声明告诉解析器中缀运算符的优先级/关联性是什么.