Size: a a a

Elm Lang сообщество разработчиков

2017 November 02

Aq

A64m AL256m qn[cores] in Elm Lang сообщество разработчиков
в (недо)омеге это уже не пролог, а примерно тот же язык, что и на велью-левел
источник

Aq

A64m AL256m qn[cores] in Elm Lang сообщество разработчиков
но понятно, что раз главное предназначение тайплевел-программирования в хаскеле это нагенерить бойлерплейтного кода комбинированием тайпклассовых словарей - то там совсем без пролога никуда и сейчас, конечно
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Меж тем я нафигачил на своей либе для композа Model/View/Update пример с формочкой:
main =
   Html.beginnerProgram
       { model =
           ByteField.init 80
               <> ByteField.init 160
               <> ByteField.init 240
               <> CheckBoxField.init True
       , update =
           ByteField.update
               <&> ByteField.update
               <&> ByteField.update
               <&> CheckBoxField.update
       , view = view
       }

bindForm =
   bind RGBBox
       ByteField.getValue
       |> with ByteField.getValue
       |> with ByteField.getValue
       |> with CheckBoxField.getValue

view model =
   let
       box =
           bindForm model
   in
       Html.div []
           [ Html.form [] <|
               (labeled "R" ByteField.view
                   <: labeled "G" ByteField.view
                   <:: labeled "B" ByteField.view
                   <:: labeled "Rounded"
                       CheckBoxField.view
               )
                   model
           , RGBBox.view box
           ]

Осталось таки сделать управляемый проброс эвентов от детей к родителю :)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Впрочем, в данном конкретном случае он особо и не нужен - кнопку для "сабмита" формы можно сделать и руками - с кастомным сообщением
источник

I

Igor in Elm Lang сообщество разработчиков
А это <:: что бы [] не писать? Или зачем?
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
И таки сделал "более elmish" версии для инфиксных операторов, которые позволяют писать
ByteField.update
   |> updateWith ByteField.update
   |> updateWith ByteField.update
   |> updateWith CheckBoxField.update

Специально для тех, кому закорючки не нравятся :)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
(<::) позволяет скомпозить из вьюх, которые работают с автоматической моделью вида (((m1, m2), m3), m4), получить плоский список List (Html msg) вместо (((Html msg, Html msg), Html msg), Html.msg)
источник

I

Igor in Elm Lang сообщество разработчиков
А кинь ссылку на либу
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вот для комбинаторов <: и <:: я пока не прибумал имён, чтобы выглядело похоже на биндинг с bind + with
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Igor
А кинь ссылку на либу
Ща
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
источник

Вл

В ладу in Elm Lang сообщество разработчиков
пол дня обсасывать одно слово
он мог иметь ввиду что угодно – это не публичная речь
он может хотел сказать грубее про higher kind в елме, но решил смягчить  и оставить просто weird stuff
источник

I

Igor in Elm Lang сообщество разработчиков
А как ты решаешь проблему бойлерплейта, когда нужно сделать много-страничное приложение с навигацией?
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Это не универсальное решение. Оно просто убирает необходимость разруливать вручную сообщения и состояния эелементов, которые не зависят друг от друга.

Пример с формой тут вполне показателен: контролы простой формы не особо влияют друг на друга, но тем не менее нужно хранить состояние для каждого контрола и маршрцтизировать их сообщения, изменяющие это состояние. А ещё в итоге нужно иметь возможность получить снапшот "данных формы" в целом для нужд самого приложения, форму использующего - для этого есть bindForm.
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
В многостраничном приложении всё будет зависеть от собственно страниц. Если оные независимы друг от друга, или же зависят только от некоторого внешнего по отношению к каждой странице состояния, то страницы вполне можно скомбинировать через API модуля blabla.Many
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Могу сделать и такой пример :)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Подход в целом вполне масштабируется, но есть и минус - сообщения превращаются в конструкции вида Left (Right (Ix 3 (Left (Left (OnChange "foo"))))), что несколько затрудняет пользование отладчиком :)
источник

I

Igor in Elm Lang сообщество разработчиков
Было бы шикарно
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Оке :)
источник