diff options
author | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-18 09:16:30 +0000 |
---|---|---|
committer | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-18 09:16:30 +0000 |
commit | 334ad56890518ddd27c1327a25c91f8db873e417 (patch) | |
tree | a38f17f40b553de7ffc608928c7a9b2f5203b1b8 /src/clojure/contrib/generic/functor.clj | |
parent | 832224974863b538b509715607c24a38a236554f (diff) |
generic: new module functor
Diffstat (limited to 'src/clojure/contrib/generic/functor.clj')
-rw-r--r-- | src/clojure/contrib/generic/functor.clj | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/clojure/contrib/generic/functor.clj b/src/clojure/contrib/generic/functor.clj new file mode 100644 index 00000000..1198c510 --- /dev/null +++ b/src/clojure/contrib/generic/functor.clj @@ -0,0 +1,38 @@ +;; Generic interface for functors + +;; by Konrad Hinsen +;; last updated March 18, 2009 + +;; Copyright (c) Konrad Hinsen, 2009. 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 clojure.contrib.generic.functor + "Generic functor interface") + + +(defmulti fmap + "Applies function f to each item in the data structure s and returns + a structure of the same kind." + {:arglists '([f s])} + (fn [f s] (type s))) + +(defmethod fmap clojure.lang.ISeq + [f s] + (map f s)) + +(defmethod fmap clojure.lang.IPersistentVector + [f v] + (into (empty v) (map f v))) + +(defmethod fmap clojure.lang.IPersistentMap + [f m] + (into (empty m) (for [[k v] m] [k (f v)]))) + +(defmethod fmap clojure.lang.IPersistentSet + [f s] + (into (empty s) (map f s))) |