blob: dcb4a492a42e824c003b6c92a0a7a92213f8bd64 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
; Records are named tuples with an identifier. `record` is a builtin function
; that generates functions for creating, reading and modifying a record.
; In type system terms, records are intersections.
; `record` can only be called in the top-level context.
(record Ns/User
name
phone-number)
; Generates the following functions:
(let user
(Ns/User/create "John" "010-123-456"))
; user ~> (Ns/User name:"John" phone-number:"010-123-456")
(Ns/User/get-name user) ; => "John"
(Ns/User/get-phone-number user) ; => "010-123-456"
(Ns/User/set-name "Rick" user)
; => (Ns/User name:"Rick" phone-number:"010-123-456")
(Ns/User/set-phone-number unit user)
; => (Ns/User name:"Rick" phone-number:<unit>)
; The builtin function `kind` returns the identifier as a string for any record value
(kind user) ; => "Ns/User"
|