$c+
module test18_3 { arrays and tuples together}

private

	typedefinition integer range [1..2] sub;
	typedefinition integer array[sub] Array;
	typedefinition tuple [integer size, Array vals, procedure test()] Pair;
	
	Pair p ;
	Array x,y;
	integer i;
	
	Pair array[sub] pa;
	
	procedure Pair@test
	begin
		write this@size;
		write this@vals[i]; 
	end;

begin
	i := 2;
	x[1] := 2;
	x[2] := 1;
	y[1] := 3;
	y[2] := 4;

	x[1], x[2] := x[2], x[1];

	p := [1,x];
	pa[1] := [5, x];
	pa[2] := [6, y];

	p!test();
	pa[i]!test();
end. {output 1 2 6 4}
