I recently read this article about Lazy Computation in C#. What the article discusses is creating lazy evaluation in C#. 

Lazy evaluation is a key feature of functional languages like Haskell but is not common in imperative languages.  It is used in Haskell because it implements parameter passing on a call by need basis.  What this means is that a functions arguments are not executed until they are used but once used the argument retains its calculated value.  This is good because it prevents wasted computation since if a argument isn't used it isn't executed.

The article goes into details about how to create lazily evaluated arguments and why they are useful.

 

Now, I don't know if anyone else found this posts title funny but I did because a lazily evaluated argument used in Haskell and that the article shows how to create is commonly referred to as a Thunk.  :)