Scala arguments may be annotated to defer their evaluation.
This can be very dangerous in an environment with uncontrolled side-effects, but also gives excellent compositional properties. Be careful!
scala> def and(x: Boolean, y: => Boolean) = x && y and: (Boolean,=> Boolean)Boolean scala> val r = and(false, throw new Error("blow up!")) r: Boolean = false