refinement Element is E List[Element] is SingleLinkedList { make: --> List[Element] is SingleLinkedList(); addFirst: List[Element] e:Element --> List[Element] is void addFirst(E e); getFirst: List[Element] -->? Element is E getFirst(); removeFirst: List[Element] -->?List[Element] is void removeFirst(); isEmpty: List[Element] is boolean isEmpty(); getLast: List[Element] -->? Element is E getLast(); removeLast: List[Element] -->? List[Element] is void removeLast(); addLast: List[Element] e:Element --> List[Element] is void addLast(E e); size: List[Element] --> int is int size(); get: List[Element] index:int -->? Element is E get(int index); set: List[Element] index:int e:Element -->? List[Element] is void set(int index, E e); add: List[Element] index:int e:Element -->? List[Element] is void add(int index, E e); remove: List[Element] index:int -->? List[Element] is void remove(int index); } end refinement