Now that we have all the machinery available to delay the evaluation of expressions we may ask whether a call-by-name variant can always be found for an existing call-by-value function. This question can be answered positively and we will now sketch out a recipe. Consider a function f with the following form:
fun f x = ... x ... x ... |
fun f x = ... (force(x)) ... (force(x)) ... |