> the `return` in `return 1` is evaluated (producing a 1) before `return . (+ 1)` is ever touched, and that _that_ return is evaluated (presumably producing an unevaluated thunk for (1 + 1)) before `return . (const 4)` is touched.
That's not quite right either. The former returns need never be evaluated.
> undefined >>= (return . (const 4)) :: Identity Int
Identity 4