type 'a ts = { mutable data : 'a; mutable prev : 'a ts; mutable next : 'a ts; };; let rec single elem = let ret = { data = elem; next = Obj.magic 0; prev = Obj.magic 0; } in ret.next <- ret; ret.prev <- ret; ret ;; let rec add elem ({next = n} as lst) = let newnext = { data = elem; prev = lst; next = n } in n.prev <- newnext; lst.next <- newnext ;; let l = single (0, 0);; let rec adder cnt = add (cnt, 0) l; if cnt > 0 then adder (cnt - 1) in adder 1000;; let rec iterator a cnt alst = if cnt = 0 then a else let (i, _) = alst.data in iterator (a + i) (cnt - 1) alst.next ;; let rec test cnt = ignore (iterator 0 1000 l); if cnt = 0 then () else test (cnt - 1) ;; test 1000000;;