Нет эквивалентного сокращения синтаксиса .foo
, и это то, что возникает снова и снова.
В списке рассылки идут долгие дискуссии на протяжении многих лет, если вы хотите узнать больше о причинах, по которым Эван упускает такую вещь (например, предложения по созданию синтаксиса сеттера, например !foo
или других специальных символов).).Как и во многих дизайнерских решениях Elm, я думаю, что ответ сводится к тому, чтобы новичкам было проще и проще делать что-либо.
Самый краткий способ обойти неуклюжий синтаксис сеттера, который яВыяснилось, что для каждого значения в форме создается один установщик:
setFoo : Foo -> Model -> Model
setFoo foo model = { model | foo = foo }
Поскольку значение model
стоит последним, его легко составлять с помощью конвейеров:
updateModel : Foo -> Bar -> Model -> Model
updateModel foo bar model =
model
|> setFoo foo
|> setBar bar
Или, если вы хотите быть немного более кратким, вы можете использовать >>
, чтобы сократить вышеприведенное:
updateModel2 : Foo -> Bar -> Model -> Model
updateModel2 foo bar = setFoo foo >> setBar bar
Ваш пример Maybe.map2
может быть написан так, где maybeModel
и maybeValue
поменялись местами с вашего примера:
Maybe.map2 setFoo maybeValue maybeModel
Конечно, вам нужно создать много стандартного установочного кода, но, на мой взгляд, работать с ним гораздо естественнее и выглядит намного лучше, чемсинтаксис сеттера, который обеспечивает язык.