Why does λz.zq reduce to q? The way I see it, it should not be further reducible. I'm thinking λz.zq is like 

lambda z: z(q) # Python, not lambda calc


and you do not know z nor q so it is not further reducible.

The below derivation (where I am wondering about the last steps) is from the new Haskell book:
It is $\beta$-reduction defined in terms of substitution (rename ($\alpha$-conversion) first if necessary):

$$(\lambda z. zq) (q) \to_{\beta} [z/q](zq) = qq. $$



In Haskell, $\lambda z.zq$ defines an anonymous function which takes a single parameter (represented by $z$) and performes $zq$.