Realizing clojure data structures, no more laziness
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


real eyes realize real lies

Lazy sequences aren't data. They can throw exceptions. They can fire missiles.

This lib can't help you if you're firing missiles, but it will realize all lazy sequences in a Clojure data structure, replacing them with {:realize.core/exception e} if they throw an exception.

(require '[realize.core :as [realize]])

(def e (Exception. "Boom!"))

(def danger-seq (map (fn [_] (throw e)) [1 2 3]))

(realize/realize {:foo danger-seq})
;; => {:foo {:realize.core/exception e}}

It also has a tool to check if your data structure threw any exceptions when being realized:

(require '[realize.core :as realize])

(def e (Exception. "Boom!"))

(realize/find-exceptions {:foo {:realize.core/exception e}})
;; => [{:exception e :path [:foo]}]


Add [realize "1.1.0"] to :dependencies in your project.clj.

Raison d'être

This lib was created so that Prone does not explode when given lazy-seqs that throw exceptions when realized.

Change log

From 1.0 to 1.1

  • Realize no longer walks into forms that cannot be recreated, like Datomic entities


lein test will run all tests.

lein test-refresh will run all the tests indefinitely. It sets up a watcher on the code files. If they change, only the relevant tests will be run again.


Copyright © (iterate inc 2018) Magnar Sveen

BSD-3-Clause, see LICENSE