Tam typicky chci ten typ i pojmenovat, protože se bude předávat dál.
Mně přijde docela těžké vymyslet rozumné názvy pro takové množství typů - např. při dotazech do tabulky s uživateli mohu potřebovat názvy typů pro různé podmnožiny { id: int, realname: string, email: string, nickname: string, ... }
- může to být klidně i 10-20 typů pro jednu tabulku. Ve skutečné aplikaci pak budou třeba i typy, kdy se joinovalo více různých tabulek.
na Either3 a výš si radši napíšu abstract sealed class (ve Scale)
Nevýhodou tohoto přístupu je, že pokud máte funkce, kde jedna vrací např A/B/C, druhá B/C, třetí A/C, čtvrtá A/D a chcete napsat funkci, která umí zpracovat A/B/D, tak se to celkem těžko vyjadřuje (pokud to vůbec jde, musíte ve Scale zkonstruovat podivnou hierarchii). Tohle řeší třeba shapeless pomocí typu Coproduct, ale ten má zase jinou řadu nevýhod. Dotty již tohle zvládne díky union typům.
Další nevýhodou je, že musíte vymýšlet názvy pro ty typy - někdy to je dost těžké a skončí to názvem typu NázevFunkceResult
.