abstract data types - rational