renamed Fmap and Tmap, and added 'recursive' trait to require_a statements