Инициализация типов / Структуры

(defrecord Size [width height])
(defrecord Point [top left])
(defrecord Rectangle [size point])

;; defrecord also makes the positional constructor ->Size
(def size (->Size 10 10))
(def point (->Point 5 5))
(def rect (->Rectangle size point))

;; a plain function serves where defaults or checks are wanted
(defn square [side] (->Size side side))

(println "width is" (get-in rect [:size :width]))
(prn rect)
(prn (square 7))