Our ways to hide that logic has been building libraries that handle nearly all of it.
But since Haskell's ecosystem is small by comparison a lot of that logic leaks to your own application code. Especially when dealing with something like stateful websocket applications.