Laziness as expressed with by-name parameters to functions can lead to surprising behavior with evaluation occurring where the developer might not expect. This is especially true when using complex helpers or building DSLs that pass by-name through several functions. This talk will show how to use Scala's type system to enforce where evaluation occurs by lifting lazy and by-name values into monadic constructs.