invoke_hierarchy/3 propagates types downward