What do we want? ──────────────── ∙ declaration syntax record Point : Set where x : Nat y : Nat ∙ constructor record { x = 4; y = 2 } ∙ projection functions dist = x p ^ 2 + y p ^ 2 ∙ open open module P = Point p dist = sqrt (x ^ 2 + y ^ 2) ∙ η p ≡ record { x = x p; y = y p } ∙ pattern matching f (record { x = suc n }) = n ∙ record update syntax how? record p { x = zero } ? Schedule ──────── First ∙ declaration systax ∙ constructor ∙ projection functions ∙ open Next ∙ η Later ∙ pattern matching ∙ update syntax What does it mean? ────────────────── data Point : Set where : (x : Nat)(y : Nat) -> Point module Point (p : Point) where x : Nat x = y : Nat y = Issues ────── ∙ mutual records? yes will it be a problem? probably not