Create a gist now

Instantly share code, notes, and snippets.

(defprotocol Fly
(fly [this] "Method to fly"))
(defn bird-fly [this]
(str (:name this) " flies..."))
(with-precondition! #'bird-fly
:not-crow
(fn [this] (not= (:name this) "Crow")))
(defrecord Bird [name species]
Fly
(fly [this] (bird-fly this)))
(def crow (Bird. "Crow" "Corvus corax"))
(fly crow) ; => Raises an exception due to precondition violation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment