Für lineare Listenstrukturen ist das einfach zu lösen: man läßt einen Zeiger über die Liste laufen, und man wendet auf jedes gefundene Element die gewünschte Operation an. Für kompliziertere Strukturen muß man sich jeweils eine Strategie zur Durchwanderung oder Traversierung überlegen, und davon kann es mehrere geben. Dieselbe Strategie will man womöglich für mehrere Operationen verwenden, und diese Operationen haben gemeinsam, daß sie jeweils auf Elemente eines gegebenen Typs angewendet werden.
Modula 2 bietet (fast ohne Konkurrenz, neben ALGOL 68 und Ansätzen in Pascal) dafür ein eigenes Konzept an: Prozedurtypen. Ein Prozedurtyp umfaßt eine Klasse von Prozeduren mit gleicher Funktionalität, aber womöglich verschiedener Auswirkung. Beispiel: der Typ
hat die Bedeutung: tu irgendwas mit einem Wert-Argument vom Typ btree. Hat nun eine Durchwanderungsstrategie ein Argument vom Typ Bearbeiter, so kann man dafür im konkreten Anwendungsfall eine beliebige Operation passender Funktionalität einsetzen. Auch Variablen von einem Prozedurtyp sind möglich und können mit konkreten Funktionen passenden Typs besetzt werden.TYPE Bearbeiter = PROCEDURE(btree);
Prozedur- bzw. Funktionstypen treten auch in anderem Zusammenhang auf: bei der Bildung des bestimmten Integrals einer beliebigen integrierbaren reellen Funktion f über einem festen Intervall [a,b]
I(f) = f(t) dtmit einem geeigneten numerischen Integrationsverfahren
ist der Integrand vom TypPROCEDURE Integriere(f: realfct; a, b: real): real;
TYPE realfct = PROCEDURE(real): real;