idris-0.9.17: test/records003/records003.idr
record Person : Nat -> Type where
MkPerson : (name : String) ->
(age : Nat) ->
Person age
record Event : Type where
MkEvent : (name : String) -> (organiser : Person a) -> Event
record Meeting : Int -> Type where
MkMeeting : (event : Event) ->
(organiser : Person a) ->
(year : Int) ->
Meeting year
new_organiser : String -> List (Meeting x) -> List (Meeting x)
new_organiser n = map (record { event->organiser->name = n })
next_year : Meeting x -> Meeting (x+1)
next_year m = record { organiser->age
= record { organiser->age } m + 1,
event->organiser->age
= record { event->organiser->age } m + 1,
year = _ } m
fred : Person 20
fred = MkPerson "Fred" _
jim : Person 29
jim = MkPerson "Jim" 29
idm : Event
idm = MkEvent "Idris Developers Meeting" fred
idm_gbg : Meeting 2014
idm_gbg = MkMeeting idm jim _
test : Meeting 2015
test = next_year idm_gbg
main : IO ()
main = do printLn (record { event->organiser->name } test)
printLn (record { event->organiser->age } test)
printLn (record { event->organiser->age } idm_gbg)
printLn (record { organiser->age } test)
printLn (record { organiser->age } idm_gbg)
printLn (record { year } idm_gbg)