type foobar = {foo : int; bar : int} let fb : foobar = {foo=0; bar=0} type abc = {a : int; b : int; c : int} let abc : abc = {a=42; b=142; c=242} let a : int = abc.a let b : int = abc.b let c : int = abc.c let projection (r : foobar) : int = r.foo + r.bar let modify (r : foobar) : foobar = {foo = 256; bar = r.bar} let modify_abc (r : abc) : abc = let c = 42 in {r with b=2048; c=c} type big_record = { a : int; b : int; c : int; d : int; e : int } let br : big_record = { a = 23; b = 23; c = 23; d = 23; e = 23 } type double_record = {inner : abc} let modify_inner (r : double_record) : double_record = {r with inner.b = 2048}