All the definitions should be happening "simultaneously". Mostly this is how I think definitions should work: Imagine instead of defining f in Swift, you are defining x in the following simultaneous equation: x=3 x=4 What is the value of x? (remember its a simultaneous equation, not a program...) --