Z isn't a monad from what I can see... ZZ is the monad. It's an IO action that returns a ZResult (which is either a value or an error state as you said) and has access to an environment for logging, a database connection and a configuration.
I'm not a Haskell expert though - so don't take that as truth until confirmed by someone else :-)
I'm not a Haskell expert though - so don't take that as truth until confirmed by someone else :-)