Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 35 lines (27 sloc) 1.404 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
;;; fnmap.clj: maps that dispatch get/assoc to functions

;; Copyright (c) Stuart Sierra, 2008. All rights reserved. The use
;; and distribution terms for this software are covered by the Eclipse
;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
;; which can be found in the file epl-v10.html at the root of this
;; distribution. By using this software in any fashion, you are
;; agreeing to be bound by the terms of this license. You must not
;; remove this notice, or any other, from this software.


(ns #^{:author "Stuart Sierra"
       :doc "Maps that dispatch get/assoc to user-defined functions.

Note: requires AOT-compilation"}
  clojure.contrib.fnmap
  (:require clojure.contrib.fnmap.PersistentFnMap))

(defn fnmap
  "Creates a fnmap, or functional map. A fnmap behaves like an
ordinary Clojure map, except that calls to get and assoc are
filtered through user-defined getter and setter functions, which
operate on an internal map.

(getter m key) should return a value for key.

(setter m key value) should assoc key with value and return a new
map for m.

All other map operations are passed through to the internal map."
  ([getter setter] (clojure.contrib.fnmap.PersistentFnMap/create getter setter))
  ([getter setter & keyvals]
      (apply assoc
             (clojure.contrib.fnmap.PersistentFnMap/create getter setter)
             keyvals)))
Something went wrong with that request. Please try again.