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.