Taky mne napadlo, že vhodně poskládaný funkce vracející Maybe/Either s nějakou omáčkou kolem by se mohli celkem podobat fungování výjimek. Compile-time.
Ano, Maybe je isomorfní s výjimkami.
To je dost zajímavé tvrzení na to, jak je tu pojem "výjimky" dost abstraktní.
Idea výjimek je, že odchytáváš určitou skupinu konkrétních chybových stavů v konkrétním stromu výrazů. Víc toho není. IMHO zbytek je implementační detail.
Výjimky jsou hlavně konkrétní implementace, prostě takový elegantnější long jump z céčka. Maybe je instanciace určité abstraktní konstrukce (“návrhového vzoru”), kterou lze implementovat třeba právě výjimkami. Ve skutečnosti třeba řez v logickém programování je taky jen instance Maybe a vskutku se implementuje výjimkami (jen tedy poněkud složitějšími).
A abych se vrátil z odbočky, Haskellu chybí vzhledem k “výjimkám” transparentnost, v blbovzdorném funkcionálním jazyce by měl překladač podporovat automatický lifting na Kleisliho kompozici, když nějaká normální funkce dostane instanci Maybe. Možná právě tohle lidi mate, jakmile někde zavedu v Haskellu Maybe, kontaminuju tím celý kód s tímto místem propojený. Přitom je pro překladač triviální přidat před onu funkci η, aby do sebe vše typově zapadalo.