type person = {name: string, age: int};val p1 : person = {name = "Peter", age = 99};val {name=name1, age=age1} = p1;fun nameOfPerson {name=x, age=_} = x;val name1 = nameOfPerson p1;val {name,age} = p1;val {name,...}:person = p1;val {name : string as name1,...} = p1;val f = fn {name=x,...}:person => x;val name1 = #name p1;val age1 = #age p1;fun f {lab=v} = v+1;fn _ => (* to cheat value polymorphism *) let fun eq r1 r2 = (#l1 r1) = (#l1 r2) val t = eq {l1 = 1, l2 = 3} {l1 = 1, l3 = "a"}in (eq, t)end;(printVal (it ()); ());fn _ =>let val f = fn {l1 = x,...} => x val g = fn {l1 = x, l2 = y} => (x,y) val h = fn x => (x=x, f x, g x)in (f, g, h)end;(printVal (it ()); ());
type person = {name: string, age: int};
val p1 : person = {name = "Peter", age = 99};
val {name=name1, age=age1} = p1;
fun nameOfPerson {name=x, age=_} = x;
val name1 = nameOfPerson p1;
val {name,age} = p1;
val {name,...}:person = p1;
val {name : string as name1,...} = p1;
val f = fn {name=x,...}:person => x;
val name1 = #name p1;
val age1 = #age p1;
fun f {lab=v} = v+1;
fn _ => (* to cheat value polymorphism *)
let
fun eq r1 r2 = (#l1 r1) = (#l1 r2)
val t = eq {l1 = 1, l2 = 3}
{l1 = 1, l3 = "a"}
in
(eq, t)
end;
(printVal (it ()); ());
fn _ =>
let
val f = fn {l1 = x,...} => x
val g = fn {l1 = x, l2 = y} => (x,y)
val h = fn x => (x=x, f x, g x)
in
(f, g, h)
end;
(printVal (it ()); ());