Поддерживается ли оператор доллара ($) в elm?

В 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

person Conrad.Dean    schedule 07.12.2015    source источник


Ответы (1)


Да, мы используем <| вместо $. Мы позаимствовали его из F# вместе с перевернутыми версиями |> и << для композиции . и перевернутой версией >>.
После того, как они были представлены, люди естественным образом тяготели к стилю, получившему название «конвейерная обработка», когда вы берете некоторые данные и преобразуете их в пару шагов с использованием оператора |>. В наши дни это более распространенный шаблон кода в коде Elm, чем использование <|.

Например:

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

(Взято из примера Марио на веб-сайте)

person Apanatshka    schedule 07.12.2015
comment
Хороший. Я видел это в документах, но не понял, как вы можете очистить его таким же образом. Я определенно хотел бы использовать |> и читать код вперед, чем $, и мне пришлось бы читать код в обратном направлении. - person Conrad.Dean; 07.12.2015
comment
Кроме того, в clojure это называется оператором thrush, но он реализован как инфиксный оператор над каррированными функциями, а не как макрос. - person Conrad.Dean; 14.12.2015