add reduce function
add as_range