outStanza | (isMessage) = outMessage
            | (isPresence) = outPresence
            | (isIQ) = outIQ

Why such a style doesn't work, so I must write ugly code like that:

outStanza a | (isMessage a) = outMessage a
            | (isPresence a) = outPresence a
            | (isIQ a) = outIQ a

so, guards can't be useful in point-free function definitions in any way