TEMPLATE FUNCTION Identity(Value : T) RETURNS T IF Value < Value THEN RETURN (T)Value ENDIF RETURN Value ENDFUNCTION TEMPLATE OVERLOAD PROCEDURE Visit(First : T, Others : Rest...) OUTPUT Identity(First) CALL Visit(Others...) Visit>>(Others...) ENDPROCEDURE TEMPLATE CLASS Box PRIVATE Value : T PUBLIC PROCEDURE NEW(V : T) Value <- V ENDPROCEDURE PUBLIC FUNCTION Get() RETURNS T RETURN Value ENDFUNCTION PUBLIC FUNCTION AsBox(V : Box) RETURNS Box RETURN (Box)V ENDFUNCTION ENDCLASS TEMPLATE CLASS Pair Left : A Right : B ENDCLASS TEMPLATE CLASS Bundle PUBLIC PROCEDURE Send(Values : Rest...) CALL Visit(Values...) ENDPROCEDURE ENDCLASS TEMPLATE PROCEDURE NestedTypes(Value : Box>) DECLARE Other : Box> Other <- NEW Box>() Value <- (Box>)Value ENDPROCEDURE