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