public <Z> Type map(TypeMapping<Z> mapping, Z arg) {
        return mapping.visit(this, arg);
    }
public < Z > Type map ( TypeMapping < Z > mapping , Z arg ) { return mapping . visit ( this , arg ) ; }
map a type function over all immediate descendants of this type