Skip to content

Instantly share code, notes, and snippets.

@freakhill
Last active August 29, 2015 14:06
Show Gist options
  • Save freakhill/41821f9379bd23a6b066 to your computer and use it in GitHub Desktop.
Save freakhill/41821f9379bd23a6b066 to your computer and use it in GitHub Desktop.
problem with optional parameters in protocols with core typed
(ns test.core
(:require [ clojure.core.typed :as t ]))
(t/ann-protocol P2
olol (t/IFn [P2 Kw * -> t/Any]))
(t/defprotocol> P2
(olol [this & rest]))
(t/ann-record R2 [])
(defrecord R2 []
P2
(olol [this & rest] (print rest)))
(t/check-ns)
(defn -main [& args]
(olol (R2.) :1 :2 :3))
$ lein run
DEPRECATED SYNTAX (test.core:6): clojure.core.typed/defprotocol> renamed to clojure.core.typed/defprotocol. Note the new syntax cannot be used with ann-protocol.
Initializing core.typed ...
Building core.typed base environments ...
Finished building base environments
"Elapsed time: 11783.483384 msecs"
core.typed initialized.
Start collecting test.core
DEPRECATED SYNTAX (test/core.clj:6): clojure.core.typed/defprotocol> renamed to clojure.core.typed/defprotocol. Note the new syntax cannot be used with ann-protocol.
Exception in thread "main" clojure.lang.ExceptionInfo: No such method found: olol with given signature in any of the provided interfaces: #{clojure.lang.IKeywordLookup java.util.Map java.io.Serializable clojure.lang.IRecord clojure.lang.ILookup clojure.lang.IHashEq clojure.lang.IPersistentMap clojure.lang.IObj test.core.P2} {:file "test/core.clj", :column 1, :line 10, :method olol, :methods (), :interfaces #{clojure.lang.IKeywordLookup java.util.Map java.io.Serializable clojure.lang.IRecord clojure.lang.ILookup clojure.lang.IHashEq clojure.lang.IPersistentMap clojure.lang.IObj test.core.P2}, :form (olol [this & rest] (print rest)), :params [{:atom #<Atom@20b2cd5f: {}>, :env {:file "test/core.clj", :column 1, :line 10, :context :ctx/expr, :locals {__meta {:form __meta, :name __meta, :mutable nil, :local :field, :op :binding}, __extmap {:form __extmap, :name __extmap, :mutable nil, :local :field, :op :binding}, this {:name this__#0, :form this, :op :binding, :o-tag test.core.R2, :tag test.core.R2, :local :this}}, :ns test.core}, :form rest, :name rest__#0, :variadic? true, :op :binding, :arg-id 0, :local :arg}]}, compiling:(test/core.clj:12:39)
at clojure.lang.Compiler.load(Compiler.java:7142)
at clojure.lang.RT.loadResourceScript(RT.java:370)
at clojure.lang.RT.loadResourceScript(RT.java:361)
at clojure.lang.RT.load(RT.java:440)
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:408)
at user$eval3$fn__5.invoke(form-init1981889107997277329.clj:1)
at user$eval3.invoke(form-init1981889107997277329.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)
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: clojure.lang.ExceptionInfo: No such method found: olol with given signature in any of the provided interfaces: #{clojure.lang.IKeywordLookup java.util.Map java.io.Serializable clojure.lang.IRecord clojure.lang.ILookup clojure.lang.IHashEq clojure.lang.IPersistentMap clojure.lang.IObj test.core.P2} {:file "test/core.clj", :column 1, :line 10, :method olol, :methods (), :interfaces #{clojure.lang.IKeywordLookup java.util.Map java.io.Serializable clojure.lang.IRecord clojure.lang.ILookup clojure.lang.IHashEq clojure.lang.IPersistentMap clojure.lang.IObj test.core.P2}, :form (olol [this & rest] (print rest)), :params [{:atom #<Atom@20b2cd5f: {}>, :env {:file "test/core.clj", :column 1, :line 10, :context :ctx/expr, :locals {__meta {:form __meta, :name __meta, :mutable nil, :local :field, :op :binding}, __extmap {:form __extmap, :name __extmap, :mutable nil, :local :field, :op :binding}, this {:name this__#0, :form this, :op :binding, :o-tag test.core.R2, :tag test.core.R2, :local :this}}, :ns test.core}, :form rest, :name rest__#0, :variadic? true, :op :binding, :arg-id 0, :local :arg}]}
at clojure.core$ex_info.invoke(core.clj:4403)
at clojure.tools.analyzer.passes.jvm.annotate_methods$annotate_methods.invoke(annotate_methods.clj:81)
at clojure.tools.analyzer.jvm$run_passes$fn__14072.invoke(jvm.clj:407)
at clojure.tools.analyzer.ast$prewalk.invoke(ast.clj:91)
at clojure.tools.analyzer.ast$prewalk$walk__12573.invoke(ast.clj:90)
at clojure.core$mapv$fn__6311.invoke(core.clj:6353)
at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:63)
at clojure.core.protocols$fn__6093.invoke(protocols.clj:98)
at clojure.core.protocols$fn__6057$G__6052__6066.invoke(protocols.clj:19)
at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31)
at clojure.core.protocols$fn__6076.invoke(protocols.clj:60)
at clojure.core.protocols$fn__6031$G__6026__6044.invoke(protocols.clj:13)
at clojure.core$reduce.invoke(core.clj:6289)
at clojure.core$mapv.invoke(core.clj:6353)
at clojure.tools.analyzer.ast$fn__12555$fn__12557.invoke(ast.clj:51)
at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:63)
at clojure.core.protocols$fn__6093.invoke(protocols.clj:98)
at clojure.core.protocols$fn__6057$G__6052__6066.invoke(protocols.clj:19)
at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31)
at clojure.core.protocols$fn__6076.invoke(protocols.clj:60)
at clojure.core.protocols$fn__6031$G__6026__6044.invoke(protocols.clj:13)
at clojure.core$reduce.invoke(core.clj:6289)
at clojure.tools.analyzer.ast$fn__12555.invoke(ast.clj:53)
at clojure.lang.MultiFn.invoke(MultiFn.java:231)
at clojure.tools.analyzer.ast$update_children.invoke(ast.clj:72)
at clojure.tools.analyzer.ast$update_children.invoke(ast.clj:67)
at clojure.tools.analyzer.ast$prewalk.invoke(ast.clj:91)
at clojure.tools.analyzer.ast$prewalk$walk__12573.invoke(ast.clj:90)
at clojure.core$mapv$fn__6311.invoke(core.clj:6353)
at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:63)
at clojure.core.protocols$fn__6093.invoke(protocols.clj:98)
at clojure.core.protocols$fn__6057$G__6052__6066.invoke(protocols.clj:19)
at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31)
at clojure.core.protocols$fn__6076.invoke(protocols.clj:60)
at clojure.core.protocols$fn__6031$G__6026__6044.invoke(protocols.clj:13)
at clojure.core$reduce.invoke(core.clj:6289)
at clojure.core$mapv.invoke(core.clj:6353)
at clojure.tools.analyzer.ast$fn__12555$fn__12557.invoke(ast.clj:51)
at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
at clojure.core.protocols$fn__6093.invoke(protocols.clj:98)
at clojure.core.protocols$fn__6057$G__6052__6066.invoke(protocols.clj:19)
at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31)
at clojure.core.protocols$fn__6076.invoke(protocols.clj:60)
at clojure.core.protocols$fn__6031$G__6026__6044.invoke(protocols.clj:13)
at clojure.core$reduce.invoke(core.clj:6289)
at clojure.tools.analyzer.ast$fn__12555.invoke(ast.clj:53)
at clojure.lang.MultiFn.invoke(MultiFn.java:231)
at clojure.tools.analyzer.ast$update_children.invoke(ast.clj:72)
at clojure.tools.analyzer.ast$update_children.invoke(ast.clj:67)
at clojure.tools.analyzer.ast$prewalk.invoke(ast.clj:91)
at clojure.tools.analyzer.ast$prewalk$walk__12573.invoke(ast.clj:90)
at clojure.tools.analyzer.ast$fn__12555$fn__12557.invoke(ast.clj:51)
at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:63)
at clojure.core.protocols$fn__6093.invoke(protocols.clj:98)
at clojure.core.protocols$fn__6057$G__6052__6066.invoke(protocols.clj:19)
at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31)
at clojure.core.protocols$fn__6076.invoke(protocols.clj:60)
at clojure.core.protocols$fn__6031$G__6026__6044.invoke(protocols.clj:13)
at clojure.core$reduce.invoke(core.clj:6289)
at clojure.tools.analyzer.ast$fn__12555.invoke(ast.clj:53)
at clojure.lang.MultiFn.invoke(MultiFn.java:231)
at clojure.tools.analyzer.ast$update_children.invoke(ast.clj:72)
at clojure.tools.analyzer.ast$update_children.invoke(ast.clj:67)
at clojure.tools.analyzer.ast$prewalk.invoke(ast.clj:91)
at clojure.tools.analyzer.jvm$run_passes.invoke(jvm.clj:406)
at clojure.tools.analyzer.jvm$analyze$fn__14077.invoke(jvm.clj:476)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1862)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.tools.analyzer.jvm$analyze.invoke(jvm.clj:474)
at clojure.tools.analyzer.jvm$analyze_PLUS_eval.invoke(jvm.clj:529)
at clojure.core.typed.analyze_clj$analyze1.invoke(analyze_clj.clj:108)
at clojure.core.typed.analyze_clj$ast_for_file$fn__14561.invoke(analyze_clj.clj:146)
at clojure.core.typed.analyze_clj$ast_for_file.invoke(analyze_clj.clj:141)
at clojure.core.typed.analyze_clj$ast_for_ns.invoke(analyze_clj.clj:172)
at clojure.core.typed.collect_utils$collect_ns_STAR_.invoke(collect_utils.clj:79)
at clojure.core.typed.collect_phase$collect_ns.invoke(collect_phase.clj:63)
at clojure.core.typed.check_ns_common$check_ns_info$fn__24817$fn__24818.invoke(check_ns_common.clj:65)
at clojure.core.typed.check_ns_common$check_ns_info$fn__24817.invoke(check_ns_common.clj:59)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invoke(core.clj:624)
at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1862)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.core.typed.check_ns_common$check_ns_info.doInvoke(check_ns_common.clj:44)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invoke(core.clj:628)
at clojure.core.typed.check_ns_common$check_ns.doInvoke(check_ns_common.clj:118)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invoke(core.clj:628)
at clojure.core.typed.check_ns_clj$check_ns.doInvoke(check_ns_clj.clj:23)
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:2225)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at clojure.core.typed$check_ns.invoke(typed.clj:2222)
at test.core$eval121.invoke(core.clj:14)
at clojure.lang.Compiler.eval(Compiler.java:6703)
at clojure.lang.Compiler.load(Compiler.java:7130)
... 33 more
(defproject test "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/core.typed "0.2.68"]]
:main test.core
:core.typed {:check [test.core]})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment