    (interceptor/get-effect context key not-found)))
 
 (defn assoc-effect
+  "Returns a new `context` with a new effects map that contains `key`
+   mapped to the `value`."
   [context key value]
   (interceptor/assoc-effect context key value))
 

;; -- API ---------------------------------------------------------------------
;;
;; This namespace represents the re-frame API
;;
;; Below, you'll see we've used this technique:
;;   (def  api-name-for-fn    deeper.namespace/where-the-defn-is)
;;
;; So, we promote a `defn` in a deeper namespace "up" to the API
;; via a `def` in this namespace.
;;
;; Turns out, this approach makes it hard:
;;   - to auto-generate API docs
;;   - for IDEs to provide code completion on functions in the API
;;
;; Which is annoying. But there are pros and cons and we haven't
;; yet revisited the decision.  To compensate, we've added more nudity
;; to the docs.
;;


;; -- dispatch ----------------------------------------------------------------
(defn dispatch

  ([id value]
   (cofx/inject-cofx id value)))

(defn clear-cofx ;; think unreg-cofx
  "When called with no args, unregisters all coeffect handlers. When given one arg,
   assumed to be the `id` of a registered coeffect handler, unregisters the 
   associated handler." 
  ([]
   (registrar/clear-handlers cofx/kind))
  ([id]
   (registrar/clear-handlers cofx/kind id)))

;; -- Events ------------------------------------------------------------------

