Type systems preventing laziness-related memory leaks?
Levy's call by push value calculus makes a distinction between values and their thunks.  For a value v of type ty the computation thunk v has type U ty.  Lindley and McBride's Frank language, inspired by CBPV, also makes this distinction between computations and values explicit, though unlike Haskell, Frank is strict.