added compose, map, reduce