    (fn []
        (let [[downstream-metadata-accessor applicator] (chain)
 	     [src-metadata src-key] (downstream-metadata-accessor)]
-	 [ ;;n get metadata / key
+	 [ ;; get metadata / key
 	  (fn [] [src-metadata split-key])
 	  ;; apply
 	  (fn [hook]

	  ])
       )))

;; next step e.g. (select [a <model.field> b <model.field> c <model.field>] from [model....] where [(= a 10)...]....)

(defn execute [monad]

;;  ;;  false)
;;  )

(def whales-by-type (msplit my-whales :type false))

(execute
(mpivot
 (munion
  (mcount
   (msplit
    whales-by-type
    :time
    false
    (fn [time] (list (or (.lower years time) time))) ;; TODO: fencepost error...
    ))
  "union(count(split(whales, :time)))")
 :key years)
 )

;; would this make sense ?

;; (def count-by-time (msplit :time (mcount)))
;; (my-whales (msplit :type ... count-by-time (union count-by-time)))

;; ;; or

;; dodgy
;; (def sum-by-value-date (msplit :valueDate (msum :amount))
;; (my-trades (msplit :nostro sum-by-value-date (union sum-by-value-date)))

;; ;; and 

;; unfinished
;; (def sum-by-value-date (msplit :valueDate dates (msum :amount))
;; (def nostro-projection (pivot dates :valueDate (union sum-by-value-date)))
;; (my-trades (msplit :currency (msplit :nostro sum-by-value-date nostro-projection)))

;;--------------------------------------------------------------------------------

