generic type Element_T is private; package Opt27_Pkg is type Node_T is private; type List_T is private; function Is_Null (Node : in Node_T) return Boolean; generic type Template_T is private; with function Is_Match (Element : in Element_T; Template : in Template_T) return Boolean is <>; function Find_Elem (Template : Template_T; List : List_T) return Node_T; private type Node_Rec_T; type Node_T is access Node_Rec_T; type List_T is record First_Node : Node_T := null; Last_Node : Node_T := null; end record; end Opt27_Pkg;