美元符号($)在Elm中受支持吗?

15
在 Haskell 中,您可以使用 $ 运算符清理代码片段,从而无需使用圆括号。请问 Elm 是否支持此运算符或类似的运算符?我可以自己定义它,但希望这是内置的功能。以下是它的工作原理:
import Html
import List exposing (map, foldr)

datas = [("a", 1), ("b", 2), ("c", 3)]

{--}
($) : (a -> b) -> (a -> b)
($) a b = a b
infixr 0 $
--}

main =
  {-- replace all these parens
  Html.text (toString (foldr (++) "" (map fst datas)))
  --}
  Html.text $ toString $ foldr (++) "" $ map fst datas
1个回答

24

是的,我们使用<|而不是$。 我们从F#借鉴了它以及翻转版本|>和用于组合.<<和翻转版本>>
一旦引入了这些运算符,人们自然倾向于一种被称为“流水线”的风格,其中您可以使用|>运算符在几个步骤中对一些数据进行转换。现在,这是Elm代码中比使用<|更常见的代码模式。

例如:

update : (Float, Keys) -> Model -> Model
update (dt, keys) mario =
  mario
  |> gravity dt
  |> jump keys
  |> walk keys
  |> physics dt

(源自网站上的Mario示例)


1
不错。我在文档中看到过这个,但没有想到可以用它来清理东西。我肯定想使用 |> 并向前阅读我的代码,而不是 $ 并且必须向后阅读我的代码。 - Conrad.Dean
此外,在Clojure中,这也被称为“画眉鸟”操作符,但它是通过柯里化函数实现的中缀操作符,而不是作为宏来实现的。 - Conrad.Dean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接