                     vs2             (concat vs2a vs2b)]
                 [(->B+TreeInternalNode b (dec partition-size) ks1 vs1)
                  nk
-                 (->B+TreeInternalNode b (- partition-size (rem size 2)) ks2 vs2)]))
+                 (->B+TreeInternalNode b (- partition-size (rem size 2)) ks2 vs2)
+                 leaf-neighbours]))
 
             (ins [{:keys [b ks vs size] :as n} k v]
               (if-not (= k ::inf)



(defprotocol B+TreeModifyable
  (insert [this k v]))

(defprotocol B+TreeLookupable
  (lookup [this k])

                (let [nvs (-> vs butlast (concat [v]))]
                  (->B+TreeInternalNode b size ks nvs))))]

      (let [[childk childv]  (lookup this k)
            [n1 nk n2 nlnbs] (insert childv k v leaf-neighbours)
            nn               (if (nil? n2)
                               (ins this childk n1)
                               (-> (ins this nk n1)
                                   (ins childk n2)))]
        (if (>= (-> nn :size) b)
          (split nn)
          [nn nil nil nlnbs]))))

  B+TreeLookupable

