On 12/22/2011 10:24 PM, rixed@happyleptic.org wrote: > I have these types: > > type t = { operation : t1 -> t2 ; > some_fields : of_some_types } > type t_priv = { t : t ; > some_other_fields : of_some_other_types } > Should I fear some backfire? You might one day forget this [Obj.magic], and access the field [t] that has not yet been initialized, and get a segfault. My advise would be to first create a dummy [t] record: let dummy_t = { operation = (fun _ -> failwith "t not initialized"); some_fields = ... some dummy initializer .. } and use it as the initial value for uninitialized values. let t_priv = { t = dummy_t; ... } in let t = make_operations t_priv in t_priv.t <- t The good thing is that, since it is uniq in your program, you can test if t_priv was initialized easily: if t_priv.t == dummy_t then failwith "t_priv not yet constructed !" --Fabrice