add map-apply and on-if