Vladimir
Это ж нехера не красиво буит
Денис
ну имплементация будет некрасивой, а интерфейс — самый обычный
Vladimir
Тогда что красивого?
Денис
то, что компилятор гарантирует, что список непустой =)))
Anonymous
ну проблема та же остается
Денис
я честно говоря чё-то не могу такого нагуглить даже без "rust"
Vladimir
Опять таки, возвращаюсь к исходному вопросу: есть хешмапа на типах?
Vladimir
Возможно не все задачи можно элегантно решать на типах?
Денис
ну вот конкретно мою — можно
Денис
тривиальное решение существует =)
Anonymous
Anonymous
на хаскеле такое же решение
Денис
хохо, неплохо
Anonymous
что в нем неэлегантного? @c_vld
Денис
много бойлерплейта на самом деле, всегда приходится отдельно обрабатывать первый элемент
Anonymous
պլհկ
Do you even SESSION TYPES bro
Vladimir
Anonymous
тот стракт и отдельный хендлинг первого элемента
Vladimir
Ну тебе ответил Денис, слишком много ебли с отдельным полем и всё те же чеки что и без этой ебли в рантайме.
Денис
ну слушай, чеки всё-таки далеко не те же
Денис
скажем, мне компилятор физически не даст возможности сделать пустую мапу, если объявить её таким образом
Vladimir
Remove first =>
assert hm.len() >0
Vladimir
Денис
я в общем-то не спорю, что у такого решения выгода (на мой взгляд) сугубо теоретическая, что, мол, компилятор гарантирует, что мапа непустая
Денис
так-то гораздо проще рантайм-проверки вставить
Vladimir
Т.е. при удалении первого значения, нужно делать те же чеки что в рантаймовском варианте всегда.
Денис
но я хочу непустую мапу, которая гарантируется компилятором =)
Денис
рантайм-оверхед не снижается, это понятно
Денис
он наоборот кмк возрастёт =)
Vladimir
Добавь тест и делай в рантайме
Vladimir
Так все питонисты делают
Денис
xD
Vladimir
Играетесь тут со своими типами в игрушечном языке
Денис
Денис
Anonymous
ага, согласен что с этим решением есть проблемы, но всё же не отнимает от факта того, что это наиболее эффективное решение с возможностями системы типов
Anonymous
надо просто вынести в модуль как в хаскеле со всей реимплементацией и забыть
Anonymous
в итоге получится в несколько степеней лучше чем если делать с ассертами
(((Sergey(not seresha))
Раст - заебись
Денис
(((Sergey(not seresha))
Zero coast
(((Sergey(not seresha))
No
Anonymous
FEARLESS CONCURRENCY
(((Sergey(not seresha))
But time
Berkus
Zero coast
можно пожалуйста без многострочной наркомании?
(((Sergey(not seresha))
Kerrigan
Berkus
Berkus
ты же изначально хотел непустой сет, правильно?
Anonymous
Денис
NonEmptySet = (key, NonEmptySet) ?)
Денис
ненене дэвид блейн
Денис
да хоть сет хоть мапа, разницы принципиальной тут нет
Berkus
разница в том вокруг чего у тебя обертка newtype
Berkus
NonemptyMap<key, NonemptySet<T>> это всегда непустая мапа со всегда непустыми значениями
Денис
да, и именно её мне и нужно реализовать
Денис
потому что добрых людей, уже сделавших это, по всей видимости, не нашлось
Денис
блин
Денис
в глаза ебусь, сорян
Berkus
ну так это, pub struct NonemptyMap<K,V>(Map<K,V>) и вперед
Денис
Anonymous
Anonymous
🤔
Vladimir
Денис
в общем мы на самом деле вроде со всем разобрались
Anonymous
а лол
Денис
всем спасибо за участие в беседе)
Vladimir