use tuple type for temporary lambda object
do refatorings; split some procedures as function
enable non-template do-end block