在CoffeeScript中,是否存在类似于Haskell的$运算符的概念?我似乎无法找到关于这个问题的任何内容,但我相信我曾经在GitHub上看到过一个问题。
我想做的是写
foo = bar $ baz 1 2
而不是
foo = bar (baz 1 2)
答案 0 :(得分:1)
看起来你可能对Haskell中$
的确切含义感到有些困惑。
从its type - (a -> b) -> a -> b
- $
可以看出,只有“知道”两个论点。
因此,在foo = bar $ baz 1 2
示例中,$
并未“了解”baz 1 2
。
分组发生的原因是因为“函数应用程序的优先级高于任何中缀运算符”(source)。因此,使用中缀运算符.
的相同表达式的解析方式完全相同:
foo = bar . baz 1 2 -- also parsed as `bar (baz 1 2)`
-- because of function application's high precedence
因此,$
所做的唯一事情是采用两个参数并将第一个应用于第二个。只要Coffeescript允许更高阶函数,实现$
就很简单了。您注意到的其余行为是Haskell语言的一部分。
答案 1 :(得分:0)
阅读上面发布的GitHub问题,似乎已经多次争论不休了。然而,目前还没有结论,但似乎并没有将其纳入其中。
一个人alexkg在CoffeeScript的his own fork中实现了该功能,并命名了运算符<-
。