Skip to content

Instantly share code, notes, and snippets.

(run-components
(make-component "Comp1"
{:init (fn [v s]
(event :set-msg "Ho")
(event :print nil)
{:msg "Hi"})
:print (fn [v s]
(println (:msg s)))
:set-msg (fn [v s]
{:msg v})})
(defmacro program [& components]
`(run-components ~@components))
(defmacro component [name & handlers]
`(make-component ~name (conj {} ~@handlers)))
(defmacro on [handler args & body]
{handler `(fn ~args ~@body)})
(program
; Define a component.
(component "Comp1"
; Event handler for :init events
(on :init [v s]
; Trigger some events
(event :print nil)
(event :set-msg "Ho")
(event :print nil)
; Set this components state
; Define a function to send events
(defn event [k v] nil)
; Define the data structure used to model a component
(defstruct component-s :name :handlers :state)
; Create a component by creating an instance of the data structure
(defn make-component [name handlers]
(struct component-s name handlers {}))