Next: , Previous: The module system, Up: Modules


9.2 An example module.

For illustrative purposes, here is the definition of a simple module for managing queues:

     :- module queue.
     :- interface.
     
     % Declare an abstract data type.
     
     :- type queue(T).
     
     % Declare some predicates which operate on the abstract data type.
     
     :- pred empty_queue(queue(T)).
     :- mode empty_queue(out) is det.
     :- mode empty_queue(in) is semidet.
     
     :- pred put(queue(T), T, queue(T)).
     :- mode put(in, in, out) is det.
     
     :- pred get(queue(T), T, queue(T)).
     :- mode get(in, out, out) is semidet.
     
     :- implementation.
     
     % Queues are implemented as lists. We need the `list' module
     % for the declaration of the type list(T), with its constructors
     % '[]'/0 % and '.'/2, and for the declaration of the predicate
     % list.append/3.
     
     :- import_module list.
     
     % Define the queue ADT.
     
     :- type queue(T) == list(T).
     
     % Declare the exported predicates.
     
     empty_queue([]).
     
     put(Queue0, Elem, Queue) :-
              list.append(Queue0, [Elem], Queue).
     
     get([Elem | Queue], Elem, Queue).
     
     :- end_module queue.