``` // synthesises type `fun (A: Type) (B : Type) -> {x: A, y: B}` def good_id = fun (A: Type) (B: Type) (p: {x: A, y: B}) => ({x = p.x, y = p.y} : {x : A, y : B}); // synthesises type `fun (A: Type) (B : Type) -> {x: A, y: p}`! def bad_id = fun (A: Type) (B: Type) (p: {x: A, y: B}) => {x = p.x, y = p.y}; ```