【问题标题】:Definition of Haskell's $-OperatorHaskell 的 $-Operator 的定义
【发布时间】:2018-11-20 00:08:08
【问题描述】:

postthis 等其他来源坚持认为 $-operator 的定义是

($) :: (a -> b) -> a -> b
f $ x = f x

($) f x = f x

($) = id

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

k :: (a -> b) -> a -> b
k f x = f x

但我得到的是:

-- 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]

k 不应该替代$ 吗?我做错了什么?

【问题讨论】:

    标签: haskell definition


    【解决方案1】:

    你错过了fixity declaration

    infixr 0 $
    

    或者在你的例子中:

    infixr 0 `k`
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-29
      • 2017-12-10
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2011-04-22
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多