(let ((type t1 (record (fst int) (snd int) (thd int))) (type t2 (record (fst t1) (snd t1) (thd t1))) (type t3 (record (fst t2) (snd t2) (thd t2))) (var v (new t3 (fst (new t2 (fst (new t1 (fst 1) (snd 2) (thd 3))) (snd nil) (thd nil))) (snd nil) (thd nil))) (type arr (array int)) (var a1 (new-array arr 10 0))) (:= (aref a1 (dot (dot (dot v fst) fst) fst)) (dot (dot (dot v fst) fst) fst)))