Size: a a a

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

2019 June 27

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вся фишка алгебраических типов в том, что они композятся — и декомпозятся. Если отобрать Pattern Matching, это вдвое уменьшает полезность ADT
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
без особой теории, просто на практике запили Init функции для нескольких кейсов
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
полочилось очень лампово
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
и скалируется
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
рекомендую тоже попробовать
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Т.е. вы отбираете у тайпчекера возможность проверить ваш код и считаете это безусловно хорошей затеей?
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
+ нам это срезало "цать" тест кейсов
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Anton Komissarov
рекомендую тоже попробовать
Я знаю, что такое smart constructors, не нужно мне это пробовать :)
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
Т.е. вы отбираете у тайпчекера возможность проверить ваш код и считаете это безусловно хорошей затеей?
наверное мы друг друга не понимаем. У нас тип на подобии
cart = { selected: Int, rest: Dict Int _Type}
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
и бизнес логика которая диктует нам, что у нас всегда должен быть  выбран уникальный элемент
источник

AP

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

AK

Anton Komissarov in Elm Lang сообщество разработчиков
и что там нету дупликации этого же самого ключа
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
всё гораздо сложнее в реальной жизни
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
но суть такова
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
я хз, как это сделать с помощью простых типов
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
У вас weakly typed тип. Вы эту слабину слегка подпираете смарт-конструктором.
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Словарь и так по сути — partial mapping. Т.е. семантика отсутствия ключа в него уже заложена. Зачем сверху городить какую-то проверку, если можно при доставании получить Nothing, если ключ не найден?
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вот вы делаете функцию-конструктор, которая проверяет, что selected входит в ключи rest. Но вам придётся при каждом изменении cart это проверять — буквально при каждом! Потому что кто-то может поменять rest так, что selected "выпадет".
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
тут немного в другую сторону работает
источник

AK

Anton Komissarov in Elm Lang сообщество разработчиков
легче показать на реальном коде
источник