ensure closure under map, filter, unique, reject