with Ada.Containers.Ordered_Maps, Ada.Containers.Ordered_Sets; package Candidates.Containers is package Candidate_Maps is new Ada.Containers.Ordered_Maps (Key_Type => CandidateID, Element_Type => Candidate); subtype Candidate_Map is Candidate_Maps.Map; procedure Read_Candidates (Filename : in String; State : in State_Name; Candidate_Data : out Candidate_Map); package CandidateID_Maps is new Ada.Containers.Ordered_Maps (Key_Type => Positive, Element_Type => CandidateID); use type CandidateID_Maps.Map; package CandidateID_Map_Maps is new Ada.Containers.Ordered_Maps (Key_Type => Positive, Element_Type => CandidateID_Maps.Map); -- Possibly put some aspects here to ensure the types are as expected? subtype Above_Line_Ballot is CandidateID_Map_Maps.Map; subtype Below_Line_Ballot is CandidateID_Maps.Map; procedure Generate_Ballots (Candidate_Data : in Candidate_Map; Above_Ballot : out Above_Line_Ballot; Below_Ballot : out Below_Line_Ballot); -- Debugging function function To_String (Above_Ballot : in Above_Line_Ballot) return String; -- Debugging function function To_String (Below_Ballot : in Below_Line_Ballot) return String; package CandidateID_Sets is new Ada.Containers.Ordered_Sets (Element_Type => CandidateID); subtype CandidateID_Set is CandidateID_Sets.Set; end Candidates.Containers;