In the lazy evaluation page it says: bool scase(bool b, lazy void dg) { if (b) { dg(); return true; } return false; } That is somehow unnecessary doubled precision. The following code should do the same: bool scase(bool b, lazy void dg) { if (b) dg(); return b; }