(ns scratch (:require [clojure.spec.alpha :as s] [spec-dict.main :refer [dict]] [clojure.test.check.generators :as gen])) (defmulti node-spec :type) (s/def ::node (s/multi-spec node-spec :type)) (s/def ::children (s/coll-of ::node :kind vector?)) (s/def ::value nat-int?) (defmethod node-spec :branch [_] (dict {:children ::children}) #_(s/keys :req-un [::children])) (defmethod node-spec :leaf [_] (dict {:value ::value}) #_ (s/keys :req-un [::value])) (comment (binding [s/*recursion-limit* 1] (gen/generate (s/gen ::node))))