lazy interpreter draft (not passes type-checking yet)