core.typed 0.2.43 - tools.analyzer.jvm

182 views
Skip to first unread message

Ambrose Bonnaire-Sergeant

unread,
Apr 2, 2014, 11:30:24 AM4/2/14
to core.typed
Hi,


[org.clojure/core.typed "0.2.43"]

Happy to announce we've (almost) left jvm.tools.analyzer in the dust.

tools.analyzer.jvm now takes care of our AST needs. Thanks to the
amazing work of Nicola Mometto (aka. Bronsa) we now have a real
analyzer written in Clojure!

This release also cleans up the core.typed release jar, it's significantly
lighter and much tidier.

Please let me know if the new analyzer is working with your projects.

Thanks,
Ambrose

Sean Corfield

unread,
Apr 2, 2014, 6:22:58 PM4/2/14
to clojure-c...@googlegroups.com
I get the following failure with 0.2.43 (and 0.2.42 - but 0.2.40 and 0.2.41 both work fine; and this is after a lein clean):

Initializing core.typed ...
Exception in thread "main" java.lang.NoClassDefFoundError: clojure/tools/namespace/dependency/DependencyGraph, compiling:(/private/var/folders/p1/30gnjddx6p193frh670pl8nh0000gn/T/form-init7875158982839104614.clj:1:142)
at clojure.lang.Compiler.load(Compiler.java:7142)
at clojure.lang.Compiler.loadFile(Compiler.java:7086)
at clojure.main$load_script.invoke(main.clj:274)
at clojure.main$init_opt.invoke(main.clj:279)
at clojure.main$initialize.invoke(main.clj:307)
at clojure.main$null_opt.invoke(main.clj:342)
at clojure.main$main.doInvoke(main.clj:420)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.NoClassDefFoundError: clojure/tools/namespace/dependency/DependencyGraph
at clojure.core.typed.collect_phase__init.load(Unknown Source)
at clojure.core.typed.collect_phase__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at clojure.lang.RT.loadClassForName(RT.java:2093)
at clojure.lang.RT.load(RT.java:430)
at clojure.lang.RT.load(RT.java:411)
at clojure.core$load$fn__5066.invoke(core.clj:5641)
at clojure.core$load.doInvoke(core.clj:5640)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5446)
at clojure.core$load_lib$fn__5015.invoke(core.clj:5486)
at clojure.core$load_lib.doInvoke(core.clj:5485)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:626)
at clojure.core$load_libs.doInvoke(core.clj:5524)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:626)
at clojure.core$require.doInvoke(core.clj:5607)
at clojure.lang.RestFn.invoke(RestFn.java:3894)
at clojure.core.typed.init$load_impl$fn__19096.invoke(init.clj:32)
at clojure.core.typed.init$load_impl.invoke(init.clj:30)
at clojure.core.typed$load_if_needed.invoke(typed.clj:1519)
at clojure.core.typed$check_ns_info.doInvoke(typed.clj:1585)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invoke(core.clj:626)
at clojure.core.typed$check_ns.doInvoke(typed.clj:1702)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at user$eval1800$iter__1801__1805$fn__1806$fn__1812.invoke(form-init7875158982839104614.clj:1)
at user$eval1800$iter__1801__1805$fn__1806.invoke(form-init7875158982839104614.clj:1)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:484)
at clojure.core$seq.invoke(core.clj:133)
at clojure.core$dorun.invoke(core.clj:2855)
at clojure.core$doall.invoke(core.clj:2871)
at user$eval1800.invoke(form-init7875158982839104614.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6703)
at clojure.lang.Compiler.eval(Compiler.java:6693)
at clojure.lang.Compiler.load(Compiler.java:7130)
... 11 more
Caused by: java.lang.ClassNotFoundException: clojure.tools.namespace.dependency.DependencyGraph
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 53 more
Subprocess failed

Here's lein deps :tree for our project:

Possibly confusing dependencies found:
[org.clojure/core.cache "0.6.3"] -> [org.clojure/data.priority-map "0.0.2"]
 overrides
[org.clojure/core.typed "0.2.43"] -> [org.clojure/data.priority-map "0.0.4"]

Consider using these exclusions:
[org.clojure/core.typed "0.2.43" :exclusions [org.clojure/data.priority-map]]

[org.clojure/data.json "0.2.1"]
 overrides
[congomongo "0.4.2"] -> [org.clojure/data.json "0.2.4"]
 and
[lein-light-nrepl "0.0.16" :exclusions [com.cemerick/pomegranate]] -> [org.clojure/clojurescript "0.0-2138" :exclusions [org.apache.ant/ant]] -> [org.clojure/data.json "0.2.3"]

Consider using these exclusions:
[congomongo "0.4.2" :exclusions [org.clojure/data.json]]
[lein-light-nrepl "0.0.16" :exclusions [com.cemerick/pomegranate org.clojure/data.json]]

[clj-http "0.6.3"] -> [cheshire "5.0.1"]
 overrides
[selmer "0.5.4"] -> [cheshire "5.2.0"]
 and
[lein-light-nrepl "0.0.16" :exclusions [com.cemerick/pomegranate]] -> [cheshire "5.2.0"]

Consider using these exclusions:
[selmer "0.5.4" :exclusions [cheshire]]
[lein-light-nrepl "0.0.16" :exclusions [cheshire com.cemerick/pomegranate]]

 [clj-http "0.6.3"]
   [cheshire "5.0.1"]
     [com.fasterxml.jackson.core/jackson-core "2.1.1"]
     [com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.1.1"]
   [commons-codec "1.6"]
   [commons-io "2.4"]
   [crouton "0.1.1"]
     [org.jsoup/jsoup "1.7.1"]
   [org.apache.httpcomponents/httpclient "4.2.2"]
   [org.apache.httpcomponents/httpcore "4.2.3"]
   [org.apache.httpcomponents/httpmime "4.2.2"]
   [slingshot "0.10.3"]
 [clj-time "0.6.0"]
   [joda-time "2.2"]
 [clojure-complete "0.2.3" :exclusions [[org.clojure/clojure]]]
 [clojure-csv "2.0.0-alpha2"]
 [clojure-source "1.3.0"]
 [com.github.stephenc.eaio-uuid/uuid "3.2.0"]
 [com.mchange/c3p0 "0.9.2.1"]
   [com.mchange/mchange-commons-java "0.2.3.4"]
 [com.newrelic.agent.java/newrelic-api "3.5.0"]
 [com.sun.mail/javax.mail "1.4.5"]
   [javax.activation/activation "1.1"]
 [commons-discovery "0.5"]
   [commons-logging "1.1.1"]
 [congomongo "0.4.2"]
   [org.clojure/core.incubator "0.1.3"]
   [org.mongodb/mongo-java-driver "2.11.4"]
 [date-clj "1.0.1"]
 [enlive "1.1.1"]
   [org.ccil.cowan.tagsoup/tagsoup "1.2.1"]
 [expectations "2.0.7"]
   [junit "4.8.1"]
 [hiccup "1.0.2"]
 [honeysql "0.3.0"]
 [image-resizer "0.1.4"]
   [org.imgscalr/imgscalr-lib "4.2"]
 [iovation "1.0"]
 [lein-light-nrepl "0.0.16" :exclusions [[com.cemerick/pomegranate]]]
   [clj-stacktrace "0.2.7"]
   [fs "1.3.3"]
     [org.apache.commons/commons-compress "1.3"]
   [ibdknox/analyzer "0.0.2"]
   [ibdknox/tools.reader "0.8.1"]
   [org.clojure/clojurescript "0.0-2138" :exclusions [[org.apache.ant/ant]]]
     [com.google.javascript/closure-compiler "v20131014"]
       [args4j "2.0.16"]
       [com.google.code.findbugs/jsr305 "1.3.9"]
       [com.google.guava/guava "15.0"]
       [com.google.protobuf/protobuf-java "2.4.1"]
       [org.json/json "20090211"]
     [org.clojure/google-closure-library "0.0-20130212-95c19e7f0f5f"]
       [org.clojure/google-closure-library-third-party "0.0-20130212-95c19e7f0f5f"]
     [org.mozilla/rhino "1.7R4"]
 [log4j "1.2.17"]
 [metrics_publish "1.0.0"]
 [mysql/mysql-connector-java "5.1.28"]
 [org.apache.axis/axis-jaxrpc "1.4"]
 [org.apache.axis/axis "1.4"]
 [org.clojure/clojure "1.6.0"]
 [org.clojure/core.cache "0.6.3"]
   [org.clojure/data.priority-map "0.0.2"]
 [org.clojure/core.typed "0.2.43"]
   [org.clojure/core.contracts "0.0.4" :exclusions [[org.clojure/clojure]]]
     [org.clojure/core.unify "0.5.3"]
   [org.clojure/jvm.tools.analyzer "0.6.1" :exclusions [[org.clojure/clojurescript]]]
   [org.clojure/math.combinatorics "0.0.2" :exclusions [[org.clojure/clojure]]]
   [org.clojure/tools.analyzer.jvm "0.1.0-beta10"]
     [org.clojure/core.memoize "0.5.6"]
     [org.clojure/tools.analyzer "0.1.0-beta10"]
     [org.ow2.asm/asm-all "4.1"]
   [org.clojure/tools.namespace "0.2.4"]
   [org.clojure/tools.reader "0.8.3"]
 [org.clojure/data.json "0.2.1"]
 [org.clojure/java.jdbc "0.3.2"]
 [org.clojure/tools.cli "0.1.0"]
 [org.clojure/tools.logging "0.2.4"]
 [org.clojure/tools.nrepl "0.2.3" :exclusions [[org.clojure/clojure]]]
 [org.clojure/tools.trace "0.7.5"]
 [org.slf4j/slf4j-log4j12 "1.5.0"]
   [org.slf4j/slf4j-api "1.5.0"]
 [selmer "0.5.4"]
 [slamhound "1.5.4-SNAPSHOT"]
 [worldsingles/ws-logging "0.2.0"]
 [wsdl4j "1.6.2"]
Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"Perfection is the enemy of the good."
-- Gustave Flaubert, French realist novelist (1821-1880)



signature.asc

Ambrose Bonnaire-Sergeant

unread,
Apr 3, 2014, 1:24:02 AM4/3/14
to core.typed
Just pushed 0.2.44 which reverts back to an "all in" AOT jar.

Thanks,
Ambrose

Sean Corfield

unread,
Apr 3, 2014, 6:19:47 PM4/3/14
to clojure-c...@googlegroups.com
This fails for me, claiming it can't find a deftype class in my own code - stack trace below. Here's the code it seems to choke on:

;; New Relic traceable API

(ann-protocol INR
delete_by_id [INR Keyword Any Keyword -> Any]
execute_sql [INR [Any -> Any] String (HMap) -> Any]
find_by_keys [INR [Any -> Any] Keyword (HMap) (Seqable Direction) Boolean -> Any]
get_by_id [INR Keyword Any Keyword Boolean -> (HMap)]
save_row [INR Keyword (HMap) [(HMap) -> (HMap)] Keyword -> Any])
(definterface INR
(delete_by_id [table id pk])
(execute_sql [f sql-string params])
(find_by_keys [f table record ordering slave-ok?])
(get_by_id [table id pk slave-ok?])
(save_row [table record key-gen pk]))

(ann-datatype ^:no-check NR [])
(deftype NR []
INR
(^{com.newrelic.api.agent.Trace {}} delete_by_id
[_ table id pk]
(delete-by-id* table id pk))
(^{com.newrelic.api.agent.Trace {}} execute_sql
[_ f sql-string params]
(execute* f sql-string params))
(^{com.newrelic.api.agent.Trace {}} find_by_keys
[_ f table record ordering slave-ok?]
(find-by-keys* f table record ordering slave-ok?))
(^{com.newrelic.api.agent.Trace {}} get_by_id
[_ table id pk slave-ok?]
(get-by-id* table id pk slave-ok?))
(^{com.newrelic.api.agent.Trace {}} save_row
[_ table record key-gen pk]
(save-row* table record key-gen pk)))

(ann ^:no-check delete-by-id (Fn [Keyword Any -> Any]
[Keyword Any Keyword -> Any]))
(defn delete-by-id
([table id] (.delete_by_id (NR.) table id :id))
([table id pk] (.delete_by_id (NR.) table id pk)))

(ann ^:no-check execute (Fn [String -> Any]
[(U String [Any -> Any]) (U String (HMap)) -> Any]
[[Any -> Any] String (HMap) -> Any]))
(defn execute
([sql-string]
(.execute_sql (NR.) identity sql-string []))
([fn-or-sql sql-or-params]
(if (fn? fn-or-sql)
(.execute_sql (NR.) fn-or-sql sql-or-params [])
(.execute_sql (NR.) identity fn-or-sql sql-or-params)))
([f sql-string params]
(.execute_sql (NR.) f sql-string params)))

(ann ^:no-check find-by-keys (All [x y] (Fn [[x -> y] Keyword (HMap) -> y]
[[x -> y] Keyword (HMap) (Seqable Direction) -> y])))
(defn find-by-keys
([f table record]
(.find_by_keys (NR.) f table record [] false))
([f table record ordering & {:keys [slave-ok?] :or {slave-ok? false}}]
(.find_by_keys (NR.) f table record ordering slave-ok?)))

(ann ^:no-check get-by-id
(Fn [Keyword Any -> (HMap)]
[Keyword Any Keyword & :optional {:slave-ok? Boolean} -> (HMap)]))
(defn get-by-id
([table id]
(.get_by_id (NR.) table id :id false))
([table id pk & {:keys [slave-ok?] :or {slave-ok? false}}]
(.get_by_id (NR.) table id pk slave-ok?)))

(ann ^:no-check save-row (Fn [Keyword (HMap) -> Any]
[Keyword (HMap) [(HMap) -> (HMap)] -> Any]
[Keyword (HMap) [(HMap) -> (HMap)] Keyword -> Any]))
(defn save-row
([table record]
(.save_row (NR.) table record identity :id))
([table record key-gen]
(.save_row (NR.) table record key-gen :id))
([table record key-gen pk]
(.save_row (NR.) table record key-gen pk)))

And here's the stacktrace. The code runs just fine, it's only core.typed's checking that trips up on it.

java.lang.ClassNotFoundException: worldsingles.data.core.NR
URLClassLoader.java:366 java.net.URLClassLoader$1.run
URLClassLoader.java:355 java.net.URLClassLoader$1.run
(Unknown Source) java.security.AccessController.doPrivileged
URLClassLoader.java:354 java.net.URLClassLoader.findClass
ClassLoader.java:425 java.lang.ClassLoader.loadClass
Launcher.java:308 sun.misc.Launcher$AppClassLoader.loadClass
ClassLoader.java:358 java.lang.ClassLoader.loadClass
(Unknown Source) java.lang.Class.forName0
Class.java:270 java.lang.Class.forName
java.clj:169 clojure.reflect/clojure.reflect.JavaReflector
reflect.clj:44 clojure.reflect/fn[fn]
reflect.clj:44 clojure.reflect/fn[fn]
AFn.java:156 clojure.lang.AFn.applyToHelper
AFn.java:144 clojure.lang.AFn.applyTo
core.clj:626 clojure.core/apply
core.clj:2468 clojure.core/partial[fn]
RestFn.java:408 clojure.lang.RestFn.invoke
reflect.clj:100 clojure.reflect/type-reflect
RestFn.java:410 clojure.lang.RestFn.invoke
AFn.java:154 clojure.lang.AFn.applyToHelper
RestFn.java:132 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
reflect.clj:121 clojure.reflect/reflect
RestFn.java:410 clojure.lang.RestFn.invoke
check.clj:4985 clojure.core.typed.check/deftype-method-members
check.clj:5000 clojure.core.typed.check/check -COLON-deftype17488[fn]
check.clj:4994 clojure.core.typed.check/check -COLON-deftype17488
RestFn.java:423 clojure.lang.RestFn.invoke
MultiFn.java:231 clojure.lang.MultiFn.invoke
check.clj:3454 clojure.core.typed.check/check -COLON-do16866[fn]
check.clj:3446 clojure.core.typed.check/check -COLON-do16866[fn]
ArrayChunk.java:58 clojure.lang.ArrayChunk.reduce
protocols.clj:98 clojure.core.protocols/fn
protocols.clj:19 clojure.core.protocols/fn[fn]
protocols.clj:31 clojure.core.protocols/seq-reduce
protocols.clj:54 clojure.core.protocols/fn
protocols.clj:13 clojure.core.protocols/fn[fn]
core.clj:6289 clojure.core/reduce
check.clj:3481 clojure.core.typed.check/check -COLON-do16866
RestFn.java:423 clojure.lang.RestFn.invoke
MultiFn.java:231 clojure.lang.MultiFn.invoke
check.clj:4049 clojure.core.typed.check/check-let[fn]
check.clj:4044 clojure.core.typed.check/check-let
RestFn.java:587 clojure.lang.RestFn.invoke
check.clj:4172 clojure.core.typed.check/check -COLON-let17236
RestFn.java:423 clojure.lang.RestFn.invoke
MultiFn.java:231 clojure.lang.MultiFn.invoke
check.clj:184 clojure.core.typed.check/check-expr
RestFn.java:410 clojure.lang.RestFn.invoke
check.clj:152 clojure.core.typed.check/check-ns-and-deps
check.clj:141 clojure.core.typed.check/check-ns-and-deps
check.clj:141 clojure.core.typed.check/check-ns-and-deps
check.clj:141 clojure.core.typed.check/check-ns-and-deps
typed.clj:1638 clojure.core.typed/check-ns-info[fn]
typed.clj:1635 clojure.core.typed/check-ns-info
RestFn.java:410 clojure.lang.RestFn.invoke
AFn.java:154 clojure.lang.AFn.applyToHelper
RestFn.java:132 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
typed.clj:1702 clojure.core.typed/check-ns
RestFn.java:410 clojure.lang.RestFn.invoke
typed.clj:1700 clojure.core.typed/check-ns
/Developer/workspace/worldsingles/ws/model/clojure/worldsingles/src/worldsingles/payment/sbw.clj:16 worldsingles.payment.sbw/eval8790
Compiler.java:6703 clojure.lang.Compiler.eval
Compiler.java:6666 clojure.lang.Compiler.eval
core.clj:2927 clojure.core/eval
eval.clj:77 lighttable.nrepl.eval/->result
AFn.java:156 clojure.lang.AFn.applyToHelper
AFn.java:144 clojure.lang.AFn.applyTo
core.clj:626 clojure.core/apply
core.clj:2468 clojure.core/partial[fn]
RestFn.java:408 clojure.lang.RestFn.invoke
core.clj:2559 clojure.core/map[fn]
LazySeq.java:40 clojure.lang.LazySeq.sval
LazySeq.java:49 clojure.lang.LazySeq.seq
RT.java:484 clojure.lang.RT.seq
core.clj:133 clojure.core/seq
core.clj:2595 clojure.core/filter[fn]
LazySeq.java:40 clojure.lang.LazySeq.sval
LazySeq.java:49 clojure.lang.LazySeq.seq
RT.java:484 clojure.lang.RT.seq
core.clj:133 clojure.core/seq
core.clj:2855 clojure.core/dorun
core.clj:2871 clojure.core/doall
eval.clj:126 lighttable.nrepl.eval/eval-clj
RestFn.java:442 clojure.lang.RestFn.invoke
eval.clj:192 lighttable.nrepl.eval/eval2637[fn]
AFn.java:152 clojure.lang.AFn.applyToHelper
AFn.java:144 clojure.lang.AFn.applyTo
core.clj:624 clojure.core/apply
core.clj:1862 clojure.core/with-bindings*
RestFn.java:425 clojure.lang.RestFn.invoke
eval.clj:177 lighttable.nrepl.eval/eval2637[fn]
eval.clj:176 lighttable.nrepl.eval/eval2637[fn]
MultiFn.java:227 clojure.lang.MultiFn.invoke
core.clj:98 lighttable.nrepl.core/queued[fn]
core.clj:2402 clojure.core/comp[fn]
interruptible_eval.clj:138 clojure.tools.nrepl.middleware.interruptible-eval/run-next[fn]
AFn.java:22 clojure.lang.AFn.run
ThreadPoolExecutor.java:1145 java.util.concurrent.ThreadPoolExecutor.runWorker
ThreadPoolExecutor.java:615 java.util.concurrent.ThreadPoolExecutor$Worker.run
Thread.java:744 java.lang.Thread.run
signature.asc

Ambrose Bonnaire-Sergeant

unread,
Apr 4, 2014, 8:23:06 AM4/4/14
to core.typed
Sean,

Please try 0.2.45-20140404.122210-3

Thanks,
Ambrose

Sean Corfield

unread,
Apr 6, 2014, 10:52:59 PM4/6/14
to clojure-c...@googlegroups.com
That version still fails the same way.
signature.asc

Ambrose Bonnaire-Sergeant

unread,
Apr 7, 2014, 1:15:58 AM4/7/14
to core.typed
Thanks for testing. Back to the drawing board.

Ambrose Bonnaire-Sergeant

unread,
Apr 9, 2014, 1:43:18 PM4/9/14
to core.typed
Please try 0.2.45-20140409.173947-4

Sean Corfield

unread,
Apr 9, 2014, 2:50:03 PM4/9/14
to clojure-c...@googlegroups.com
On Apr 9, 2014, at 10:43 AM, Ambrose Bonnaire-Sergeant <abonnair...@gmail.com> wrote:
Please try 0.2.45-20140409.173947-4

That no longer has the exception (good) but now the code fails type checking whereas it used to pass (not so good). Here are some sample errors it is complaining about now - which all seem to be associated with the deftype calls (see below):

Type Error (worldsingles/data/core.clj:283:6) Type mismatch:

Expected: (HMap :mandatory {})

Actual: Object
in: (save-row* table record key-gen pk)


Type Error (worldsingles/data/core.clj:283:6) Type mismatch:

Expected: (Fn [(HMap :mandatory {}) -> (HMap :mandatory {})])

Actual: Object
in: (save-row* table record key-gen pk)


Type Error (worldsingles/data/core.clj:283:6) Type mismatch:

Expected: clojure.lang.Keyword

Actual: Object
in: (save-row* table record key-gen pk)


Type Error (worldsingles/data/core.clj:267:1) Type mismatch:

Expected: (U Object nil)

Actual: Any
in: (save-row* table record key-gen pk)


Type Checker: Found 21 errors
signature.asc

Ambrose Bonnaire-Sergeant

unread,
Apr 10, 2014, 11:46:55 AM4/10/14
to core.typed
What is save-row* ? Kinda looks like a definterface method.. but that's save_row.

Sean Corfield

unread,
Apr 10, 2014, 8:49:32 PM4/10/14
to clojure-c...@googlegroups.com
On Apr 10, 2014, at 8:46 AM, Ambrose Bonnaire-Sergeant <abonnair...@gmail.com> wrote:
What is save-row* ? Kinda looks like a definterface method.. but that's save_row.

It's the implementation function for save_row. It's annotated thus:

(ann ^:no-check save-row* [Keyword (HMap) [(HMap) -> (HMap)] Keyword -> Any])
(defn- save-row*
  "..."
  [table record key-gen pk]
  ...)

This type checks fine on 0.2.41. Looks like core.typed is losing the protocol type signatures and upcasting all the arguments to Object?

Sean
signature.asc

Ambrose Bonnaire-Sergeant

unread,
Apr 10, 2014, 10:47:10 PM4/10/14
to core.typed
Looks like save-row* itself is not to blame, can I have more context for the
arguments to save-row*?

Thanks,
Ambrose

Ambrose Bonnaire-Sergeant

unread,
Apr 10, 2014, 10:48:56 PM4/10/14
to core.typed
Ah, I assume this is inside the implementation of the deftype.

Sean Corfield

unread,
Apr 12, 2014, 1:01:04 AM4/12/14
to clojure-c...@googlegroups.com
save-row* is just a regular function - you already have all the
protocol / deftype code in this thread. Need me to post it again?

On Thu, Apr 10, 2014 at 7:48 PM, Ambrose Bonnaire-Sergeant
--
Sean A Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
World Singles, LLC. -- http://worldsingles.com/

Ambrose Bonnaire-Sergeant

unread,
Apr 12, 2014, 8:49:12 AM4/12/14
to core.typed
This exposes the hack of using ann-protocol to annotate definterface. Working on ann-interface.

Thanks,
Ambrose

Sean Corfield

unread,
Apr 13, 2014, 1:24:04 AM4/13/14
to clojure-c...@googlegroups.com
:) Cool!

On Sat, Apr 12, 2014 at 5:49 AM, Ambrose Bonnaire-Sergeant
Reply all
Reply to author
Forward
0 new messages