First, I'm confused about what is the input and what is the predicate
The haskell 2010 report (
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-420003.11) says that after the | we can have any type of qualifier, which can be 1. a generator (I think you called this the input) 2. a local binding (we don't care about these in your example, there are none) or 3. boolean guards, which are any expression that evaluate to Bool (your predicates). So there isn't really a `predicate postion`, predicates can occur anywhere after the `|`.
As for the behaviour, its easiest to see what happens with a regular list of inputs:
λ> [(x,y) | x <- [1,2], y <- ['A', 'B']]
[(1,'A'),(1,'B'),(2,'A'),(2,'B')]
so `y` acts as an inner loop and `x` the outer.
> [1 | x <- [1,3], even x, y <- undefined]
Here we start the outer loop over x, and only if x is even, then we loop over y. But x is never even, so we never loop over y, so we never evaluate `undefined` (Haskell is lazy). So essentially filter out all elements of x and are left with []
> [1 | x <- [1,3], y <- undefined, even x]
Now we've moved the guard into the inner loop, after we try to evaluate y. So we blow up trying to do that and GHCi catches the exception
[1 | x <- [1,3], y <- [1..], even x]
Similar to the above, the (even x) isn't guarding the evaluation of y, so we're stuck generating all the infinite pairings of x = 1, y = 1...