Let's not turn this into a cliche! Monads are powerful. I find do notation much easier to read in many cases:
do subscribe
assertSubSucceeded
startRoundtripTimer
assertRecievedWebHook "channel_occupied"
stopRoundtripTimer
unsubscribe
assertRecievedWebHook "channel_vacated"
If you haven’t come across monads before, don’t worry, you can think of the monad we are using as “code that does IO”.On top of this, once you have a basic intuition for how monads work, you start gaining the ability to describe what your program does at the type level. For example, This block of code requires a read-only environment (Reader), has logging output (Writer), and accesses websockets (WebSocketT).
Also, the fact that Haskell is a less mainstream language led to a few obvious disadvantages: less documentation, not quite as many libraries, poorer tooling (although having on the fly type errors show up with mod-ghc is already a massive win over Ruby).
Yes, you essentially need to be prepared to do any or all of the following if you want to use Haskell commercially:
1) Patch libraries and tooling.
2) Engage communities and maintainers (bug reports, mailing list, etc).
3) Implement functionality (from scratch) which "should be there".
If you can't, or won't, do these things, Haskell will be much more painful to use in the real world.