Modifying the observers

ADT

  element head(list* l) {  
head

require( ! empty(l) ); return l->e;
\c{// for both CONS and INTERVAL}
} list* tail(list* l) {
tail

require( ! empty(l) ); switch( l->tag ) { case CONS: return l->next; case INTERVAL: return interval((l->e)+1,l->z); } }

slide: Modifying the observers