macro to implement lazy types from comp.lang.lisp