improve handling of default types
support passing move instance to `.then()`