Code Monkey home page Code Monkey logo

clj-tuple's Introduction

This library provides efficient implementations for small maps and vectors, discussed more in this post. These implementations will eventually be merged into Clojure proper, but for now can be used by replacing vector with clj-tuple/vector and hash-map with clj-tuple/hash-map.

usage

Build Status

[clj-tuple "0.2.2"]
clj-tuple> (vector 1 2 3)
[1 2 3]
clj-tuple> (hash-map 1 2 3 4)
{1 2, 3 4}

license

Copyright © 2015 Zachary Tellman

Distributed under the MIT License

clj-tuple's People

Contributors

daveray avatar triclops200 avatar wagjo avatar ztellman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clj-tuple's Issues

AOT(?) bug on loading

I'm trying to use clj-tuple in a lein-droid project, and it works fine in debug mode, but as soon as I change to release mode I get an odd exception

...
Caused by: java.lang.NullPointerException
AndroidRuntime:     at java.io.File.fixSlashes(File.java:185)
AndroidRuntime:     at java.io.File.<init>(File.java:134)
AndroidRuntime:     at clojure.lang.DalvikDynamicClassLoader.defineMissingClass(DalvikDynamicClassLoader.java:84)

I've made a minimal project which reproduces this at https://github.com/AdamClements/clj-tuple-droid-repro-case which also has the full stacktrace and more details.

It looks like an AOT bug as it's in the middle of an eval block, but I'm not sure where to start, and what is making it want to try to load files at this stage... any pointers appreciated!

If I remove the clj-tuple dependency and simply use persistent vectors, the rest of my (non-trivial, lots of other dependencies) project works identically to debug mode, no problems.

Thanks.

(empty (tuple)) throws AbstractMethodError

"A tuple behaves exactly like a Clojure vector" is the ideal, from README.md.

But Clojure's "empty" function works differently with vectors and clj-tuples:

user> (require '[clj-tuple :refer [tuple]])
nil
user> (empty [1 2 3])
[]
user> (empty (tuple 1 2 3))
AbstractMethodError   clojure.core/empty (core.clj:4691)

I expected (empty (tuple)) to yield an empty tuple.

The clojure.core source code for "empty" looks like it would default to an empty vector for things that do not implement IPersistentCollection, but it looks like clj-tuple proclaims that interface.

Noted with clj-tuple "0.1.2".

(seq tuple) and (rest tuple) do not behave like vector

(seq [:a :b :c]) yields (:a :b :c) whereas (seq (tuple :a :b :c)) yields [:a :b :c]. similar for rest. as a result e.g. a conj will add at a different place (conj (seq t) :foo) yields different results whether t is a tuple or a vector.

in my case this is desired behavior, however I'd like some way of ensuring that an argument to a function is a tuple and will trigger the desired behavior. specifying ^Tuple2 metadata tag on the function argument was rejected (why?). how about (tuple? x) analogous to (vector? x)

Implement IFn

Thoughts on whether tuple should implement IFn? Currently:

user=> ([0 1] 0)
0
user=> ((clj-tuple/tuple 0 1) 0)
ClassCastException clj_tuple.Tuple2 cannot be cast to clojure.lang.IFn  user/eval1843 (NO_SOURCE_FILE:1)

(= x (tuple ...)) throws exception

(= 0 (tuple 0))
->
UnsupportedOperationException count not supported on this type: Long clojure.lang.RT.countFrom (RT.java:556)

Another issue from trying to interop with core.match...

clojure.spec issues

Hi,

I am trying to include clj-leveldb in my project using Clojure 1.9 and the clj-tuple dependency cannot be loaded (when the ns form is evaled in the REPL):

#error {
 :cause Call to clojure.core/defn- did not conform to spec:
In: [0] val: clj-tuple/conj-tuple fails spec: :clojure.core.specs/defn-args at: [:args :name] predicate: simple-symbol?
:clojure.spec/args  (clj-tuple/conj-tuple [t__15721__unified__ x__15722__unified__] (clojure.core/let [t__15721__unified__ t__15721__unified__] (clojure.core/case (.count t__15721__unified__) 0 (new Tuple1 x__15722__unified__ (clojure.core/meta t__15721__unified__)) 1 (new Tuple2 (. t__15721__unified__ e0) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 2 (new Tuple3 (. t__15721__unified__ e0) (. t__15721__unified__ e1) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 3 (new Tuple4 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 4 (new Tuple5 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 5 (new Tuple6 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) (. t__15721__unified__ e4) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 6 (clojure.core/let [t__15721__unified__ t__15721__unified__] (clj_tuple.VectorSeq. 0 7 (clojure.core/-> [] clojure.core/transient (clojure.core/conj! (.nth t__15721__unified__ 0)) (clojure.core/conj! (.nth t__15721__unified__ 1)) (clojure.core/conj! (.nth t__15721__unified__ 2)) (clojure.core/conj! (.nth t__15721__unified__ 3)) (clojure.core/conj! (.nth t__15721__unified__ 4)) (clojure.core/conj! (.nth t__15721__unified__ 5)) (clojure.core/conj! x__15722__unified__) clojure.core/persistent!) (clojure.core/meta t__15721__unified__))))))

 :data #:clojure.spec{:problems [{:path [:args :name], :pred simple-symbol?, :val clj-tuple/conj-tuple, :via [:clojure.core.specs/defn-args :clojure.core.specs/defn-args], :in [0]}], :args (clj-tuple/conj-tuple [t__15721__unified__ x__15722__unified__] (clojure.core/let [t__15721__unified__ t__15721__unified__] (clojure.core/case (.count t__15721__unified__) 0 (new Tuple1 x__15722__unified__ (clojure.core/meta t__15721__unified__)) 1 (new Tuple2 (. t__15721__unified__ e0) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 2 (new Tuple3 (. t__15721__unified__ e0) (. t__15721__unified__ e1) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 3 (new Tuple4 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 4 (new Tuple5 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 5 (new Tuple6 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) (. t__15721__unified__ e4) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 6 (clojure.core/let [t__15721__unified__ t__15721__unified__] (clj_tuple.VectorSeq. 0 7 (clojure.core/-> [] clojure.core/transient (clojure.core/conj! (.nth t__15721__unified__ 0)) (clojure.core/conj! (.nth t__15721__unified__ 1)) (clojure.core/conj! (.nth t__15721__unified__ 2)) (clojure.core/conj! (.nth t__15721__unified__ 3)) (clojure.core/conj! (.nth t__15721__unified__ 4)) (clojure.core/conj! (.nth t__15721__unified__ 5)) (clojure.core/conj! x__15722__unified__) clojure.core/persistent!) (clojure.core/meta t__15721__unified__))))))}
 :via
 [{:type clojure.lang.Compiler$CompilerException
   :message clojure.lang.ExceptionInfo: Call to clojure.core/defn- did not conform to spec:
In: [0] val: clj-tuple/conj-tuple fails spec: :clojure.core.specs/defn-args at: [:args :name] predicate: simple-symbol?
:clojure.spec/args  (clj-tuple/conj-tuple [t__15721__unified__ x__15722__unified__] (clojure.core/let [t__15721__unified__ t__15721__unified__] (clojure.core/case (.count t__15721__unified__) 0 (new Tuple1 x__15722__unified__ (clojure.core/meta t__15721__unified__)) 1 (new Tuple2 (. t__15721__unified__ e0) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 2 (new Tuple3 (. t__15721__unified__ e0) (. t__15721__unified__ e1) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 3 (new Tuple4 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 4 (new Tuple5 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 5 (new Tuple6 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) (. t__15721__unified__ e4) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 6 (clojure.core/let [t__15721__unified__ t__15721__unified__] (clj_tuple.VectorSeq. 0 7 (clojure.core/-> [] clojure.core/transient (clojure.core/conj! (.nth t__15721__unified__ 0)) (clojure.core/conj! (.nth t__15721__unified__ 1)) (clojure.core/conj! (.nth t__15721__unified__ 2)) (clojure.core/conj! (.nth t__15721__unified__ 3)) (clojure.core/conj! (.nth t__15721__unified__ 4)) (clojure.core/conj! (.nth t__15721__unified__ 5)) (clojure.core/conj! x__15722__unified__) clojure.core/persistent!) (clojure.core/meta t__15721__unified__))))))
 #:clojure.spec{:problems [{:path [:args :name], :pred simple-symbol?, :val clj-tuple/conj-tuple, :via [:clojure.core.specs/defn-args :clojure.core.specs/defn-args], :in [0]}], :args (clj-tuple/conj-tuple [t__15721__unified__ x__15722__unified__] (clojure.core/let [t__15721__unified__ t__15721__unified__] (clojure.core/case (.count t__15721__unified__) 0 (new Tuple1 x__15722__unified__ (clojure.core/meta t__15721__unified__)) 1 (new Tuple2 (. t__15721__unified__ e0) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 2 (new Tuple3 (. t__15721__unified__ e0) (. t__15721__unified__ e1) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 3 (new Tuple4 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 4 (new Tuple5 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 5 (new Tuple6 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) (. t__15721__unified__ e4) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 6 (clojure.core/let [t__15721__unified__ t__15721__unified__] (clj_tuple.VectorSeq. 0 7 (clojure.core/-> [] clojure.core/transient (clojure.core/conj! (.nth t__15721__unified__ 0)) (clojure.core/conj! (.nth t__15721__unified__ 1)) (clojure.core/conj! (.nth t__15721__unified__ 2)) (clojure.core/conj! (.nth t__15721__unified__ 3)) (clojure.core/conj! (.nth t__15721__unified__ 4)) (clojure.core/conj! (.nth t__15721__unified__ 5)) (clojure.core/conj! x__15722__unified__) clojure.core/persistent!) (clojure.core/meta t__15721__unified__))))))}, compiling:(clj_tuple.clj:556:1)
   :at [clojure.lang.Compiler load Compiler.java 7442]}
  {:type clojure.lang.ExceptionInfo
   :message Call to clojure.core/defn- did not conform to spec:
In: [0] val: clj-tuple/conj-tuple fails spec: :clojure.core.specs/defn-args at: [:args :name] predicate: simple-symbol?
:clojure.spec/args  (clj-tuple/conj-tuple [t__15721__unified__ x__15722__unified__] (clojure.core/let [t__15721__unified__ t__15721__unified__] (clojure.core/case (.count t__15721__unified__) 0 (new Tuple1 x__15722__unified__ (clojure.core/meta t__15721__unified__)) 1 (new Tuple2 (. t__15721__unified__ e0) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 2 (new Tuple3 (. t__15721__unified__ e0) (. t__15721__unified__ e1) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 3 (new Tuple4 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 4 (new Tuple5 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 5 (new Tuple6 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) (. t__15721__unified__ e4) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 6 (clojure.core/let [t__15721__unified__ t__15721__unified__] (clj_tuple.VectorSeq. 0 7 (clojure.core/-> [] clojure.core/transient (clojure.core/conj! (.nth t__15721__unified__ 0)) (clojure.core/conj! (.nth t__15721__unified__ 1)) (clojure.core/conj! (.nth t__15721__unified__ 2)) (clojure.core/conj! (.nth t__15721__unified__ 3)) (clojure.core/conj! (.nth t__15721__unified__ 4)) (clojure.core/conj! (.nth t__15721__unified__ 5)) (clojure.core/conj! x__15722__unified__) clojure.core/persistent!) (clojure.core/meta t__15721__unified__))))))

   :data #:clojure.spec{:problems [{:path [:args :name], :pred simple-symbol?, :val clj-tuple/conj-tuple, :via [:clojure.core.specs/defn-args :clojure.core.specs/defn-args], :in [0]}], :args (clj-tuple/conj-tuple [t__15721__unified__ x__15722__unified__] (clojure.core/let [t__15721__unified__ t__15721__unified__] (clojure.core/case (.count t__15721__unified__) 0 (new Tuple1 x__15722__unified__ (clojure.core/meta t__15721__unified__)) 1 (new Tuple2 (. t__15721__unified__ e0) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 2 (new Tuple3 (. t__15721__unified__ e0) (. t__15721__unified__ e1) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 3 (new Tuple4 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 4 (new Tuple5 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 5 (new Tuple6 (. t__15721__unified__ e0) (. t__15721__unified__ e1) (. t__15721__unified__ e2) (. t__15721__unified__ e3) (. t__15721__unified__ e4) x__15722__unified__ (clojure.core/meta t__15721__unified__)) 6 (clojure.core/let [t__15721__unified__ t__15721__unified__] (clj_tuple.VectorSeq. 0 7 (clojure.core/-> [] clojure.core/transient (clojure.core/conj! (.nth t__15721__unified__ 0)) (clojure.core/conj! (.nth t__15721__unified__ 1)) (clojure.core/conj! (.nth t__15721__unified__ 2)) (clojure.core/conj! (.nth t__15721__unified__ 3)) (clojure.core/conj! (.nth t__15721__unified__ 4)) (clojure.core/conj! (.nth t__15721__unified__ 5)) (clojure.core/conj! x__15722__unified__) clojure.core/persistent!) (clojure.core/meta t__15721__unified__))))))}
   :at [clojure.core$ex_info invokeStatic core.clj 4725]}]
 :trace
 [[clojure.core$ex_info invokeStatic core.clj 4725]
  [clojure.spec$macroexpand_check invokeStatic spec.clj 681]
  [clojure.spec$macroexpand_check invoke spec.clj 670]
  [clojure.lang.AFn applyToHelper AFn.java 156]
  [clojure.lang.AFn applyTo AFn.java 144]
  [clojure.lang.Var applyTo Var.java 700]
  [clojure.lang.Compiler macroexpand1 Compiler.java 6816]
  [clojure.lang.Compiler macroexpand Compiler.java 6888]
  [clojure.lang.Compiler eval Compiler.java 6962]
  [clojure.lang.Compiler eval Compiler.java 6941]
  [clojure.core$eval invokeStatic core.clj 3187]
  [clojure.core$eval invoke core.clj 3183]
  [clj_tuple$eval15715 invokeStatic clj_tuple.clj 556]
  [clj_tuple$eval15715 invoke clj_tuple.clj 556]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [byte_streams.utils$eval15030$loading__7732__auto____15031 invoke utils.clj 1]
  [byte_streams.utils$eval15030 invokeStatic utils.clj 1]
  [byte_streams.utils$eval15030 invoke utils.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 482]
  [byte_streams$eval14991$loading__7732__auto____14992 invoke byte_streams.clj 1]
  [byte_streams$eval14991 invokeStatic byte_streams.clj 1]
  [byte_streams$eval14991 invoke byte_streams.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 421]
  [clj_leveldb$eval14985$loading__7732__auto____14986 invoke clj_leveldb.clj 1]
  [clj_leveldb$eval14985 invokeStatic clj_leveldb.clj 1]
  [clj_leveldb$eval14985 invoke clj_leveldb.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 551]
  [konserve_leveldb.core$eval14979$loading__7732__auto____14980 invoke core.clj 1]
  [konserve_leveldb.core$eval14979 invokeStatic core.clj 1]
  [konserve_leveldb.core$eval14979 invoke core.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 930]
  [feebame.places$eval11068$loading__7732__auto____11069 invoke places.clj 1]
  [feebame.places$eval11068 invokeStatic places.clj 1]
  [feebame.places$eval11068 invoke places.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 512]
  [feebame.db$eval11060$loading__7732__auto____11061 invoke db.clj 1]
  [feebame.db$eval11060 invokeStatic db.clj 1]
  [feebame.db$eval11060 invoke db.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5893]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 930]
  [feebame.rest$eval431$loading__7732__auto____432 invoke rest.clj 1]
  [feebame.rest$eval431 invokeStatic rest.clj 1]
  [feebame.rest$eval431 invoke rest.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 482]
  [feebame.system$eval30$loading__7732__auto____31 invoke system.clj 1]
  [feebame.system$eval30 invokeStatic system.clj 1]
  [feebame.system$eval30 invoke system.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 421]
  [feebame.core$eval24$loading__7732__auto____25 invoke core.clj 1]
  [feebame.core$eval24 invokeStatic core.clj 1]
  [feebame.core$eval24 invoke core.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.RT loadResourceScript RT.java 374]
  [clojure.lang.RT loadResourceScript RT.java 365]
  [clojure.lang.RT load RT.java 455]
  [clojure.lang.RT load RT.java 421]
  [clojure.core$load$fn__7846 invoke core.clj 6008]
  [clojure.core$load invokeStatic core.clj 6007]
  [clojure.core$load doInvoke core.clj 5991]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5812]
  [clojure.core$load_one invoke core.clj 5807]
  [clojure.core$load_lib$fn__7791 invoke core.clj 5852]
  [clojure.core$load_lib invokeStatic core.clj 5851]
  [clojure.core$load_lib doInvoke core.clj 5832]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$load_libs invokeStatic core.clj 5889]
  [clojure.core$load_libs doInvoke core.clj 5873]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 659]
  [clojure.core$require invokeStatic core.clj 5911]
  [clojure.core$require doInvoke core.clj 5911]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [user$eval15 invokeStatic form-init6552948365213814794.clj 1]
  [user$eval15 invoke form-init6552948365213814794.clj 1]
  [clojure.lang.Compiler eval Compiler.java 6978]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler eval Compiler.java 6967]
  [clojure.lang.Compiler load Compiler.java 7430]
  [clojure.lang.Compiler loadFile Compiler.java 7368]
  [clojure.main$load_script invokeStatic main.clj 277]
  [clojure.main$init_opt invokeStatic main.clj 279]
  [clojure.main$init_opt invoke main.clj 279]
  [clojure.main$initialize invokeStatic main.clj 310]
  [clojure.main$null_opt invokeStatic main.clj 344]
  [clojure.main$null_opt invoke main.clj 341]
  [clojure.main$main invokeStatic main.clj 423]
  [clojure.main$main doInvoke main.clj 386]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.lang.Var applyTo Var.java 700]
  [clojure.main main main.java 37]]}

I can provide further information, if necessary.

Best,
Christian

Clojure 1.7.0 Alpha 2 compatibility - Boxed math warnings

clj-http transitively brings in clj-tuple 0.1.5 via potemkin and I see these warnings at startup with 1.7.0 Alpha 2:

Boxed math warning, clj_tuple.clj:157:31 - call: public static java.lang.Number clojure.lang.Numbers.unchecked_dec(java.lang.Object).
Boxed math warning, clj_tuple.clj:181:26 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:206:21 - call: public static boolean clojure.lang.Numbers.gt(java.lang.Object,long).
Boxed math warning, clj_tuple.clj:217:19 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:223:25 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:235:21 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:249:21 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:281:19 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:295:19 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:324:26 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:330:26 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:334:26 - call: public static boolean clojure.lang.Numbers.isZero(java.lang.Object).
Boxed math warning, clj_tuple.clj:563:48 - call: public static java.lang.Number clojure.lang.Numbers.unchecked_inc(java.lang.Object).

(eval (tuple ...)) thows CompilerException

Neat library.

Built-in datastructures support evaluation, eg
(eval [1]) -> [1]

Using [clj-tuple "0.1.2"] I get
(eval (tuple 1)) ->
CompilerException java.lang.UnsupportedOperationException: count not supported on this type: Symbol, compiling:(NO_SOURCE_PATH:1:1)

Is this fixable?

For context, my use case is actually somewhat of a workaround for core.match. I want to dynamically supply the lhs and rhs for a match-transform pair, but with match being a macro I'm resorting to

(defn rule-fn [lhs rhs]
  (eval `#(match % ~lhs ~rhs :else nil)))

support pretty print code dispatch

When I use clojure.tools.logging to do (spy sometuple) I get: Multiple methods in multimethod 'code-dispatch' match dispatch value: class clj_tuple.Tuple4 -> interface clojure.lang.IPersistentVector and interface clojure.lang.ISeq, and neither is preferred

I think there needs to be a prefer-method call of some sort there somewhere, I'm not too firm on the details of pprint.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.