Here are all of the testAccess procedures in one file. You need to separate them into separate .adb files to play with them procedure testAccess0 is type nodepointer is access onewaylistnode; type onewaylistnode is record info : integer; -- could be any type next : nodepointer; end record; begin null; end; ************************** procedure testAccess1 is type onewaylistnode; -- incomplete type definition -- required for recursive type type nodepointer is access onewaylistnode; type onewaylistnode is record info : integer; -- could be any type next : nodepointer; end record; begin null; end; ************************** -- won't compile with ada.text_io; with ada.integer_text_io; procedure testAccess2 is type onewaylistnode; -- incomplete type definition -- required for recursive type type nodepointer is access onewaylistnode; type onewaylistnode is record info : integer; -- could be any type next : nodepointer; end record; head, tail : onewaylistnode; -- this declares 2 records begin head := new OneWayListNode; -- trying to point to a record tail := head; head.info := 25; ada.integer_text_io.put (head.info); ada.integer_text_io.put (tail.info); ada.text_io.put (head.next); -- believe head.next is null & can't print it this way end; ************************** with ada.text_io; with ada.integer_text_io; procedure testAccess3 is type onewaylistnode; -- incomplete type definition -- required for recursive type type nodepointer is access onewaylistnode; type onewaylistnode is record info : integer; -- could be any type next : nodepointer; end record; -- head, tail : onewaylistnode; head, tail : nodePointer; begin head := new OneWayListNode; tail := head; head.info := 25; ada.integer_text_io.put (head.info); ada.integer_text_io.put (tail.info); -- ada.text_io.put (head.next); if (head.next = null) then ada.text_io.put (" head.next isn't pointing anywhere "); end if; end; ************************** with ada.text_io; with ada.integer_text_io; procedure testAccess5 is type onewaylistnode; -- incomplete type definition -- required for recursive type type nodepointer is access onewaylistnode; type onewaylistnode is record info : integer; -- could be any type next : nodepointer := null; end record; -- head, tail : onewaylistnode; head, tail, temp, walker : nodePointer; begin head := new OneWayListNode; tail := head; head.info := 25; ada.integer_text_io.put (head.info); ada.integer_text_io.put (tail.info); -- getting a new node, inserting a value into it, connecting it to the end of the list -- and making the end_of_list_pointer point to that newest node temp := new OneWayListNode; temp.info := 4; tail.next := temp; tail := temp; -- showing the list after two nodes ada.text_io.put_line (" here's the list after a second node is inserted "); ada.integer_text_io.put (head.info); ada.integer_text_io.put (tail.info); -- getting a new node, inserting a value into it, connecting it to the end of the list -- and making the end_of_list_pointer point to that newest node temp := new OneWayListNode; temp.info := 6; tail.next := temp; tail := temp; -- want to walk through the whole list and print the walues stored walker := head; ada.integer_text_io.put( walker.info); walker := walker.next; ada.integer_text_io.put( walker.info); walker := walker.next; ada.integer_text_io.put( walker.info); end testAccess5;