Size: a a a

Programming Offtop

2021 March 24

I

Ilmir in Programming Offtop
Алексей Худяков
> Вариантность - это уже к дженерикам

Потому что пока всё мономорфно, то фича простая и понятная. Как только появляется полиморфизм, то сразу становится не очень понятно. Как отличаются, например, типы ∀a. a и ∀a. Err | a?
Следи за руками. T | R == R |T. Any | T = Any. T | T == T. T | Err == T <=> T == Err || T == Any. Всё просто же.
источник

I

Ilmir in Programming Offtop
(
> Как я добавлю новый конструктор в Either
пф, data Either a b = Left a | Right b | HehMda b
Я тоже могу скопировать себе класс String в папочку java/lang и поменять.
источник

(

( in Programming Offtop
Ilmir
Я тоже могу скопировать себе класс String в папочку java/lang и поменять.
Зачем копировать? Я автор либы, у меня метод принимает мой собственный Either
источник

I

Ilmir in Programming Offtop
(
Зачем копировать? Я автор либы, у меня метод принимает мой собственный Either
И как он будет кооперироваться с другим Either, который был написан автором другой либы?
источник

(

( in Programming Offtop
Ilmir
И как он будет кооперироваться с другим Either, который был написан автором другой либы?
Никак не будет, это два несвязанных друг с другом типа
источник

I

Ilmir in Programming Offtop
(
Никак не будет, это два несвязанных друг с другом типа
Вооооот, а у меня они связаны. Вот и вся разница.
источник

(

( in Programming Offtop
Потому что в мой эезер могут добавиться конструкторы, а что там другой челик со своим эйзером думает это меня мало волнует
источник

(

( in Programming Offtop
Ilmir
Вооооот, а у меня они связаны. Вот и вся разница.
А ещë ты семантическую информацию вычислений из-за автофлаттенинга теряешь, но я же ничего не говорю
источник

I

Ilmir in Programming Offtop
(
А ещë ты семантическую информацию вычислений из-за автофлаттенинга теряешь, но я же ничего не говорю
Лучше flatMap на каждый чих, ага.
источник

I

Ilmir in Programming Offtop
В чём разница Either (Either A B) C от Either A (Either B C)?
источник

(

( in Programming Offtop
Ilmir
Лучше flatMap на каждый чих, ага.
Лучше контролировать вложенность руками, а не втихаря размер множества проебывать
источник

I

Ilmir in Programming Offtop
(
Лучше контролировать вложенность руками, а не втихаря размер множества проебывать
источник

АХ

Алексей Худяков... in Programming Offtop
Ilmir
Следи за руками. T | R == R |T. Any | T = Any. T | T == T. T | Err == T <=> T == Err || T == Any. Всё просто же.
Уточняю вопрос. Есть ли в языке с этой фичей параметрический полиморфизм? Тогда в рантайме мы ничего не можем сказать про тип. Или подразумевается, что можно проверить является ли параметр значением типа Err?
источник

АХ

Алексей Худяков... in Programming Offtop
Ilmir
Лучше flatMap на каждый чих, ага.
Просто добавить в язык сахарок для него
источник

(

( in Programming Offtop
Ilmir
В чём разница Either (Either A B) C от Either A (Either B C)?
В чем разница (a + b) + c от a + (b + c) ?
источник

IP

Iaroslav Postovalov in Programming Offtop
Ilmir
1. Можно.
2. Нельзя. Как я в Either добавлю новый конструктор?
3. Расширение возвращаемого типа - несовместимое изменение. Ещё раз. Конкретно тебе я не запрещаю ломать код. Ломай сколько хочешь. Конкретно этот рант я написал после того, как ещё раз сломал бинарную совместимость и понял, что если бы в JVM были юнионы - мне этого делать не пришлось бы. Да, я пишу язык и от меня немного другие требования. В том числе к совместимости.
4. См 2. Как я добавлю новый конструктор в Either. Во, придумал аналогию. Смотри, у тебя есть класс String. Но от него наследоваться ты не можешь, ибо он стандартный и финальный. Функции-расширения как бы добавляют функциональность в класс, не наследуясь от него, точно так же, как и юнион типы позволяют расширить другой юнион.
5. Я рассматривал один (два) конкретный пример. Вариантность - это уже к дженерикам и там свои интересные заморочки. NB: И где этот мальчик увидел дженерики в примерах?
6. Прочти ещё раз и напиши нормально. Так дойдёт до того, что баг фиксы с добавлением обработки особого случая будут несовместимым изменением.
7. Неа, не понял ты написанного, а сразу писать комментарий.

Занятно. Я только что понял, что у меня появился хейтер. Причём такой, который хейтит не мои идеи, или взгляды, как @happy_bracket (Скобка - ты няша, несмотря на наши различия во взглядах на ХКТ), а именно меня. Что я, интересно, сделал? Не согласился с мнением, что опшн лучше нулябельности? Так вот и аргументы, почему он хуже. Но нет, надо не вести аргументированную дискуссию, как @sad_bracket, а накидывать "чё он за язык может написать". А также полностью перевирать оппонента "не совместимым изменения протокола" - я же объяснил, почему эти изменения протокола совместимые и не должны ломать пользовательский код. Подобные полемические приёмы и в до-интернетовскую не работали, а теперь, когда всё сохраняется и может быть скопировано - тем более.
нулябельность - эт юнион и есть
источник

I

Ilmir in Programming Offtop
(
В чем разница (a + b) + c от a + (b + c) ?
Спасибо за отличный пример. Если это ассоциативная операция, то можно опустить скобки, то есть сделать автофлаттенинг.
источник

(

( in Programming Offtop
Ilmir
Спасибо за отличный пример. Если это ассоциативная операция, то можно опустить скобки, то есть сделать автофлаттенинг.
Да, если операция ассоциативная. В общем случае с ейзером так и есть, но такое можно (или нужно) делать не для всех типов
источник

(

( in Programming Offtop
Опять же, зависит от семантики вычисления
источник

I

Ilmir in Programming Offtop
Алексей Худяков
Уточняю вопрос. Есть ли в языке с этой фичей параметрический полиморфизм? Тогда в рантайме мы ничего не можем сказать про тип. Или подразумевается, что можно проверить является ли параметр значением типа Err?
Можно реифицировать дженерики (не вариант на JVM до прихода вальхаллы). Не всегда дженерики == стирание типов в рантайме.
источник