Fix #5: add optional validators to map()