etc. etc.
You're not helping the cause of "this is 99% readable" ;) If you add proper authentication and parser combinators [1], and configs, and.... It becomes anything but readable to a person without specific Haskell and very specific library knowledge.
And yes, I do have exposure to FP having worked with Erlang for a number of years.
I also seriously detest the unexplained love for ASCII art among many lib authors in the FP space. Servant is one such example: :> :. :<|> ! At this point, why not use J :)
[1] By the way, unless I'm mistaken, there's next to zero useful documentation on Attoparsec, there's only barebones package documentation. And no, you don't validate data using parser combinators unless your data is only strings that resolve to some DSL.