-
Notifications
You must be signed in to change notification settings - Fork 136
Expand file tree
/
Copy pathchat.clj
More file actions
32 lines (25 loc) · 718 Bytes
/
chat.clj
File metadata and controls
32 lines (25 loc) · 718 Bytes
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
28
29
30
31
32
(ns examples.chat)
; START: message
(defrecord Message [sender text])
; END: message
; START: messages
(def messages (ref ()))
; END: messages
; START: validate-message-list
(def validate-message-list
(partial every? #(and (:sender %) (:text %))))
(def messages (ref () :validator validate-message-list))
; END: validate-message-list
; START: naive-add-message
; bad idea
(defn naive-add-message [msg]
(dosync (ref-set messages (cons msg @messages))))
; END: naive-add-message
; START: add-message
(defn add-message [msg]
(dosync (alter messages conj msg)))
; END: add-message
; START: add-message-commute
(defn add-message-commute [msg]
(dosync (commute messages conj msg)))
; END: add-message-commute