(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)))
