Haskell má svoje mouchy - recordy nejsou úplně dobré, systém modulů taky ne. Pro přístup k recordům se dají použít Lens, spíš je to tak, že se Lensy nechce člověku generovat pořád a všude, takže je z toho pak trošku nešikovný mix.
Monadické transformery jsou taky něco, co je trochu zvláštní - teď zrovna koukám do PureScriptu s extensible effects - ale zatím nemám názor na to, zda je to nějak výrazně lepší nebo horší. Určitě to umožňuje to "granulárnější" kontrolu efektů - v Haskellu je to v zásadě buď IO nebo Free, extensible effects umožňují vlastně tagovat funkce, jaké efekty mají - což vlastně není vůbec špatné.
IMO jednou z hlavních nevýhod Haskellu je, že vyhodnocování není standardně striktní. Tohle například velmi ztěžuje uvažování o tom, kolik paměti program využívá (nestačí uvažovat o funkcích jednotlivě, je třeba uvažovat o celém programu naráz - využitá paměť nezávisí jen na tom, s jakými argumenty je funkce volána, ale i na tom, jaké části výsledku (ne)jsou vyhodnoceny a kdy).
Tohle je častý názor, a vůbec ho nechápu. Stačí se podívat třeba na to, jak to má purescript, který je naopak strict:
https://pursuit.purescript.org/packages/purescript-maybe/0.3.5/docs/Data.Maybe. To má být jako lepší? Ano, problematika space-leaku v haskellu je, ale po prvotních "úspěších" se mi to ve standardním kódu stává extrémně zřídka (na druhou stranu, když se mi to stane, tak to stojí za to a hraničí to s chybou překladače).
A ještě jedna věc: nelíbí se mi, že typová třída nemůže mít pro jeden typ více instancí.
Když jsem s haskellem začínal, tak jsem si to myslel taky. Ale za posledních několik projektů si neuvědomuju, že bych vůbec uvažoval o tom něco takhle použít. Máte nějaký praktický příklad, kde to vadí?
Připadá mi, že je to v současné době snad jediný jazyk, který má zároveň velmi silný typový systém a používá se poměrně hodně v praxi - tzn. nikoliv specializované projekty, ale naprosto normální "business". Ano, existují jazyky se silnějším typovým systémem, ale v porovnání s jazyky typu Java, C# jsme někde úplně jinde... navíc v haskellu se snaží pomalinku dependent types implementovat, takže budoucnost je otevřená
Některé vlastnosti Haskellu jsou mi sympatické, jiné méně a některé mě dokonce i prudí. To se však může změnit, pokud se na to budu dívat trochu z jiného úhlu a naučím se číst symboly "=>", "->", "|>" apod. Je to pro mne prostě nezvyklý zápis a čumím na to jak na nejnovější C++.
No jo, tak chvíli trvá, než to člověk pochopí....třeba u tohodle je nejdůležitější pochopit, jaké je "správné uzávorkování", pak je to najednou triviální
<code>f <$> a <*> b <*> c</code>