Ну мы это обсуждали. Идеология в том, что их не надо пропагировать вообще. Если ошибка является частью нормального поведения, используем null. Если ошибок несколько, то силед интерфейс.
Или там, где возникла, или на топ левеле. Смысл в том, что ошибка не должна переносить информацию о нормальном поведении программы. в этом смысле CancellationException- бяка
Опять-таки написать свой тип - это одна строчка. То, по чему вы все воете, это кобинаторы, но они не имеют смысла в случае множества разных ошибок, а в случае, если это одна единственная ошибка, нулябль ее отлично заменяет
Так я же по-моему четко написал, что не должна. Такой стиль, такая доктрина. Нужна и возможность другого стиля - вопрос открытый, но пока никто не привел для этого достаточно веских аргументов. В любом случае свой either со всей обвязкой пишется за полчаса