ranges
ranges with algebric types
recursive