правильно ли я понимаю, что для io языки подобные Haskell не дают особых преимуществ перед менее типизированными языками?
Если уж "и подобные Haskell", то в других системах эффектов IO "распилено на части", что даёт очевидные преимущества в части safety and correctness, как и типы вообще. Да и в Haskell сейчас эффекты абстрагируют и разделяют (см, например, MTL и Capabilities), а в IO уже собирают (интерпретируют) только в самом конце (похоже на этот ваш Dependency Injection).