(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))