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 => {...r, b: 2048, c: 42}; 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, inner.b: 2048};