4 Parameterization and Parametric Polymorphism
abstract objectcollection[T];abstract objectlist[T]isacollection[T];signaturedo[T](list[T], &(T):void):void;concrete representationnil[T]isalist[T];template representationcons[T]isalist[T];fieldhead[T](@:cons[T]):T;fieldtail[T](@:cons[T]):list[T] := nil[T];methodprepend[T](h:T, t:list[T]):list[T] {concrete objectisacons[T] { head := h, tail := t } }abstractobjecttable[Key,Value]isacollection[Value];templateobjectarray[T]isatable[int,T];methodnew_array[T](size:int, initial_value:T):array[T] {concrete objectisaarray[T] { size := size, initial_value := initial_value } }typeprintable_array[T <= printable]subtypesarray[T], printable;
Generated with Harlequin WebMaker