s are defined to ignore ordering, so it doesn't matter where they're defined, in this file or in any other file. Only the type semantics of the signature matter. Overuse of ordered guards is actually kind of a semantic flaw in Haskell, I think. It's a way of sneaking in sequential dependencies without a monad.