Když si teď na papír napíšeš obecný flatMap fungující se všemi typy (které poskytují flatten a fmap, přičemž nic jiného o nich nevíš), takže už jsi hodně hluboko v abstraktní algebře (a když si to nakreslíš, abys pochopil vztahy, dostaneš kom. diagram). KT vlastně jen poskytuje terminologii - když už znáš flatMap a flatten a další šaškárny, tak ti dá úvod do KT jen matematické termíny, žádné další poznatky. Lidi v tom většinou nevidí přínos, protože se abstrahuje od všeho konkrétního. Ale i jen standardizovaná terminologie je hodně šikovná věc.
No jo, to máš sice pravdu, ale takhle to funguje víceméně jenom v Haskellu

V míň "akademicky čístých" jazycích neřešíš obecný flatMap, ale flatMap, který funguje víceméně jenom nad seznamy. Čili to primární, co tě zajímá, je konkrétní instance, která je triviální (mapem dostanu seznam seznamů a ten flattenuju - pochopí úplně každej).
A mimochodem, jakmile princip pochopíš nad seznamy, je už docela snadná cesta si uvědomit, že seznam je jenom jedna instance a že se to dá popsat abstraktně. Od konkrétního k abstraktnímu je vždycky snadnější a správnější cesta než naopak.
Ovšem i tak k tomu mám ještě jednu výhradu: tenhle krok většinou ten "normální" programátor ani vůbec nepotřebuje udělat, protože prostě flatMap nad ničím jiným než nad seznamem používat nebude (protože neprogramuje v Haskellu ani ničem podobným, kde by to mohl využít). Čili nejenže CT nepotřebuje, protože k abstrakci se může dostat přes konkrétno, ale on nepotřebuje ani to samotný abstraktno, docela dobře si vystačí jenom s konkrétnem
