   ACmdStream
   (stream [this]
     (go-loop [x (first s) xs (next s)]
-      (doseq [[_ {:keys [layer-id]}] x]
+      (let [[_ {:keys [layer-id]}] x]
         (zat/clear! terminal layer-id))
       (let [[dt {:keys [layer-id characters]}] x]
         (zat/put-chars! terminal layer-id characters)

(defn make-rain-effect
  [layer-id vw vh]
  (let [rain-state (repeat vh (vec (repeat vw nil)))]
    (fn [terminal]
      (RainEffect. terminal layer-id rain-state))))

(defrecord TransformEffect
  [terminal layer-id ch from to duration]

  ([layer-id characters]
    (make-blink-effect layer-id characters true))
  ([layer-id characters initial]
    (make-blink-effect layer-id characters initial (repeat 1000)))
  ([layer-id characters initial intervals]
    (map vector intervals (interleave (repeat {:layer-id layer-id :characters []})
                                      (repeat {:layer-id layer-id :characters characters})))))
    ;(BlinkEffect. terminal layer-id characters initial intervals))))

(defn make-blip-effect
  [layer-id characters duration]
