Běžný Franta vůbec nemá co psát typy, pro něj je typová inference.
Vetšinou ne, ale občas mi přijde explicitně napsaný typ jako skvělý způsob dokumentace, komentáře a zpřehlednění kódu obecně.
S těmi knihovnami to je také jednoduché, někdo na úrovni prostě napíše supersofistikovaný kód (hezký příklad: http://ericniebler.com/2013/07/16/f-algebras-and-c/) a běžný Franta ho jen přímo používá, aniž by si nad ním musel lámat hlavu.
V ideálním případě by to tak šlo. Ale občas ten Franta narazí na případy kdy se musí skrz ten supersofistikovaný kód prokrokovat. Nebo třeba udělá nějakou obskurnější chybu a bude hledat, co se vůbec stalo. Pokud ten supersofistikovaný kód může vidět, tak musí být schopný mu i _přiměřeně_ rozumět. To, že by to nebyl schopný napsat, je druhá věc.
Takto jdou napsat třeba obecné monády v C++ (stejně jako v Haskellu) a pak jen implementovat konkrétní třídy, třeba seznam nebo kontinuaci, přičemž join dostanu zadarmo z bind, nebo fmap apod. Bohužel tohle mainstream moc neumí, ani Java, ani C#, ani Swift. A v tom C++ to sice jde, ale hnusně.
Zrovna u monád je to "hnusně" docela vážný zádrhel. Monády mi přijdou jako vzor, který je sice všudypřítomný ale vlastně dělá malé věci. Takový druh vzoru jako byla třeba subrutina, než se to usadilo tak, že už o tom ani neuvažujeme jako o vzoru. Takže ty hnusné kousky kódu se pak vyskytují všude. Není to kýbl hnusu, který by se dal zabalit do nějakého modulu, jako jsou třeba windows.h.
U toho Go - teď trochu odbočuju - vidím jednu velkou výhodu v jednotné volací konvenci. Z praxe - píšu knihovnu pro HPC využívající AVX-512. Normálně bych musel mít i pro amd64 pro různé OS různé verze funkcí v asembleru kvůli odlišným volacím konvencím. V Go rozhoduje jen CPU, pro amd64 napíšu jeden asembler pro všechny OS.
Tak tohle mě zaujalo. Proč je to třeba psát v asm? Co brání použití intrinsik?