Size: a a a

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

2017 May 03

AK

Anton Kotenko in Elm Lang сообщество разработчиков
Anton Kotenko
есть какой-нибудь пакет для быстрой работы с вложенными деревьями?
так всё-таки? :)
источник

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
zipper нужен, чтоли?
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
наверное что-то типа этого, да http://package.elm-lang.org/packages/elm-community/graph/2.0.0/Graph-Tree
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
но нужна возможность указать путь к листу дерева и его изменить одной функцией
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
типа как в immutableJS у Map и List есть updateIn для вложенных структур
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
"конечно в эльме такого нет - это же ненастоящий язык!" ;P
источник

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
А серьезно если, то такое "обновление по пути" пишется через zipper вполне очевидно и прямолинейно
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
А дерево по ссылке какое-то убогое :) К тому же и "батареек" толком никаких не предоставляет - ни тебе обойти, ни максимум не найти, ни смержить два дерева.
Впрочем, в эльме всё так - тайпклассов то нет! Поэтому любая реализация дерева или любого другого контейнера должна иметь и собственные реализации для всего багажа операций над контейнером.
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вот про зиппер с хаскельной вики: https://wiki.haskell.org/Zipper
источник

AP

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

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вот и для эльма кто-то зипперов понаписал :)
источник

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Но этот зиппер опять вместе со своей реализацией дерева идет (нормаьной, кстати), но, повторюсь, обобщенный zipper в эльме просто так не написать (на самом деле можно, если реализовать zipper-протокол в виде рекорда)
источник

AP

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

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
@shamansir бери этот пакет - тебе подойдет, если устроит тамошняя реализация дерева
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
@astynax да, очень классно, спасибо!!
источник