add dtools.compose()