Last active
August 29, 2015 14:06
-
-
Save freakhill/41821f9379bd23a6b066 to your computer and use it in GitHub Desktop.
problem with optional parameters in protocols with core typed
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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)) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ 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 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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