Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

117 lines (98 sloc) 2.899 kb
;; Generic interfaces for collection-related functions
;; by Konrad Hinsen
;; last updated May 5, 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
#^{:author "Konrad Hinsen"
:doc "Generic arithmetic interface
This library defines generic versions of common
collection-related functions as multimethods that can be
defined for any type."}
clojure.contrib.generic.collection
(:refer-clojure :exclude [assoc conj dissoc empty get into seq]))
;
; assoc
;
(defmulti assoc
"Returns a new collection in which the values corresponding to the
given keys are updated by the given values. Each type of collection
can have specific restrictions on the possible keys."
{:arglists '([coll & key-val-pairs])}
(fn [coll & items] (type coll)))
(defmethod assoc :default
[map & key-val-pairs]
(apply clojure.core/assoc map key-val-pairs))
; assoc-in
;
; conj
;
(defmulti conj
"Returns a new collection resulting from adding all xs to coll."
{:arglists '([coll & xs])}
(fn [coll & xs] (type coll)))
(defmethod conj :default
[coll & xs]
(apply clojure.core/conj coll xs))
;
; diassoc
;
(defmulti dissoc
"Returns a new collection in which the entries corresponding to the
given keys are removed. Each type of collection can have specific
restrictions on the possible keys."
{:arglists '([coll & keys])}
(fn [coll & keys] (type coll)))
(defmethod dissoc :default
[map & keys]
(apply clojure.core/dissoc map keys))
;
; empty
;
(defmulti empty
"Returns an empty collection of the same kind as the argument"
{:arglists '([coll])}
type)
(defmethod empty :default
[coll]
(clojure.core/empty coll))
;
; get
;
(defmulti get
"Returns the element of coll referred to by key. Each type of collection
can have specific restrictions on the possible keys."
{:arglists '([coll key] [coll key not-found])}
(fn [coll & args] (type coll)))
(defmethod get :default
([coll key]
(clojure.core/get coll key))
([coll key not-found]
(clojure.core/get coll key not-found)))
;
; into
;
(defmulti into
"Returns a new coll consisting of to-coll with all of the items of
from-coll conjoined."
{:arglists '([to from])}
(fn [to from] (type to)))
(declare seq)
(defmethod into :default
[to from]
(reduce conj to (seq from)))
;
; seq
;
(defmulti seq
"Returns a seq on the object s."
{:arglists '([s])}
type)
(defmethod seq :default
[s]
(clojure.core/seq s))
Jump to Line
Something went wrong with that request. Please try again.