Next: Submodules, Previous: The module system, Up: Modules [Contents]
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).
% Define the exported predicates.
empty_queue([]).
put(Queue0, Elem, Queue) :-
    list.append(Queue0, [Elem], Queue).
get([Elem | Queue], Elem, Queue).
:- end_module queue.