<< Back to previous view

[CTYP-215] Domain of clojure.core/zero? is Number, not Any Created: 23/Apr/15  Updated: 23/Apr/15

Status: Open
Project: core.typed
Component/s: None
Affects Version/s: 0.2.0
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Justin Holguin Assignee: Ambrose Bonnaire-Sergeant
Resolution: Unresolved Votes: 0
Labels: None


 Description   

The annotation for clojure.core/zero? gives its type as [Any -> Boolean], but calling it with anything other than a number results in a ClassCastException. The type should probably be something like:

[Number -> Boolean :filters {:then (is (t/Val 0) 0)
                             :else (! (t/Val 0) 0)}]





[CTYP-214] core.typed 0.2.84 raises an exception when trying to infer the type of (atom #{}) Created: 22/Apr/15  Updated: 22/Apr/15

Status: Open
Project: core.typed
Component/s: None
Affects Version/s: 0.2.0
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Jakub Arnold Assignee: Ambrose Bonnaire-Sergeant
Resolution: Unresolved Votes: 0
Labels: None
Environment:

Java 1.8



 Description   

Setup core.typed, for example

$ lein try org.clojure/core.typed "0.2.84"

and then simply execute

user=> (require 'clojure.core.typed)
nil
user=> (clojure.core.typed/cf (atom #{}))
Initializing core.typed ...
Building core.typed base environments ...
Finished building base environments
"Elapsed time: 4622.004619 msecs"
core.typed initialized.
IllegalArgumentException No value supplied for key: true clojure.lang.PersistentHashMap.create (PersistentHashMap.java:77)

Here's the whole stacktrace

java.lang.IllegalArgumentException: No value supplied for key: true
      PersistentHashMap.java:77 clojure.lang.PersistentHashMap.create
               type_rep.clj:614 clojure.core.typed.type-rep/-hset
                RestFn.java:423 clojure.lang.RestFn.invoke
         promote_demote.clj:221 clojure.core.typed.promote-demote/fn[fn]
         promote_demote.clj:218 clojure.core.typed.promote-demote/fn
               MultiFn.java:231 clojure.lang.MultiFn.invoke
          promote_demote.clj:49 clojure.core.typed.promote-demote/promote-var
                cs_gen.clj:1090 clojure.core.typed.cs-gen/promote-F
                cs_gen.clj:1116 clojure.core.typed.cs-gen/cs-gen-right-F
                 cs_gen.clj:328 clojure.core.typed.cs-gen/cs-gen[fn]
                 cs_gen.clj:316 clojure.core.typed.cs-gen/cs-gen
                cs_gen.clj:1594 clojure.core.typed.cs-gen/cs-gen-list[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
                cs_gen.clj:1592 clojure.core.typed.cs-gen/cs-gen-list
                RestFn.java:587 clojure.lang.RestFn.invoke
                cs_gen.clj:1747 clojure.core.typed.cs-gen/infer
                 funapp.clj:277 clojure.core.typed.check.funapp/check-funapp[fn]
                 funapp.clj:202 clojure.core.typed.check.funapp/check-funapp[fn]
                 funapp.clj:192 clojure.core.typed.check.funapp/check-funapp[fn]
                  funapp.clj:52 clojure.core.typed.check.funapp/check-funapp
                  invoke.clj:13 clojure.core.typed.check.invoke/normal-invoke
                RestFn.java:587 clojure.lang.RestFn.invoke
                 check.clj:1294 clojure.core.typed.check/check -COLON-invoke17233[fn]
                 check.clj:1273 clojure.core.typed.check/check -COLON-invoke17233
                RestFn.java:423 clojure.lang.RestFn.invoke
               MultiFn.java:231 clojure.lang.MultiFn.invoke
                  check.clj:151 clojure.core.typed.check/check-expr
                RestFn.java:423 clojure.lang.RestFn.invoke
       check_form_common.clj:40 clojure.core.typed.check-form-common/check-form-info[fn]
       check_form_common.clj:37 clojure.core.typed.check-form-common/check-form-info[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
       check_form_common.clj:25 clojure.core.typed.check-form-common/check-form-info
                RestFn.java:521 clojure.lang.RestFn.invoke
       check_form_common.clj:61 clojure.core.typed.check-form-common/check-form*
          check_form_clj.clj:22 clojure.core.typed.check-form-clj/check-form*
                 typed.clj:2155 clojure.core.typed/check-form*
                 typed.clj:2151 clojure.core.typed/check-form*
               NO_SOURCE_FILE:1 user/eval13925
             Compiler.java:6703 clojure.lang.Compiler.eval
             Compiler.java:6666 clojure.lang.Compiler.eval
                  core.clj:2927 clojure.core/eval
                   main.clj:239 clojure.main/repl[fn]
                   main.clj:239 clojure.main/repl[fn]
                   main.clj:257 clojure.main/repl[fn]
                   main.clj:257 clojure.main/repl
               RestFn.java:1523 clojure.lang.RestFn.invoke
      interruptible_eval.clj:67 clojure.tools.nrepl.middleware.interruptible-eval/evaluate[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
      interruptible_eval.clj:51 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
     interruptible_eval.clj:183 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval[fn]
     interruptible_eval.clj:152 clojure.tools.nrepl.middleware.interruptible-eval/run-next[fn]
                    AFn.java:22 clojure.lang.AFn.run
   ThreadPoolExecutor.java:1142 java.util.concurrent.ThreadPoolExecutor.runWorker
    ThreadPoolExecutor.java:617 java.util.concurrent.ThreadPoolExecutor$Worker.run
                Thread.java:745 java.lang.Thread.run

note that `(cf #{})`, or `(cf (atom {}))` or other variants all work. It only seems to be a problem with `(atom #{})`.






[CTYP-212] Can't create a promise of the same type as a record field Created: 20/Apr/15  Updated: 22/Apr/15

Status: Reopened
Project: core.typed
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Timo Mihaljov Assignee: Ambrose Bonnaire-Sergeant
Resolution: Unresolved Votes: 0
Labels: None
Environment:

[org.clojure/core.typed "0.2.84"]
[org.clojure/clojure "1.6.0"]



 Description   

It seems to be impossible to create a promise of the same type as a record field:

(ns cttest.core
  (:require [clojure.core.typed :as t]))

(t/ann-record MyRecord [p :- (t/Promise int)])

(defrecord MyRecord [p])

(defn foo []
  (t/let [x :- (t/Promise int) (promise)]))

; Type Error (cttest/core.clj:9:32) Polymorphic function promise could not be applied to arguments:
; Polymorphic Variables:
;         x
;
; Domains:
;
;
; Arguments:
;
;
; Ranges:
;         (t/Promise x)
;
; with expected type:
;         (t/Promise int)
;
; in: (promise)
; in: (promise)

Changing the type of p in MyRecord to any other type, say (t/Promise String) makes foo pass the type checker.



 Comments   
Comment by Timo Mihaljov [ 20/Apr/15 11:36 PM ]

I hit the save button too soon. I couldn't reproduce this in a clean project, so there's something else going on in my project that's causing this. I might reopen the issue once I've narrowed down what's causing it.

Comment by Timo Mihaljov [ 22/Apr/15 12:39 AM ]

The difference was that the test project was missing the record. I've reopened the issue now that it's reproducible.





[CTYP-213] core.typed 0.2.87 fails in combination with org.clojure/tools.analyzer.jvm 0.6.5 on Clojure 1.6 Created: 21/Apr/15  Updated: 21/Apr/15

Status: Open
Project: core.typed
Component/s: None
Affects Version/s: 0.2.0
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Jakub Arnold Assignee: Ambrose Bonnaire-Sergeant
Resolution: Unresolved Votes: 1
Labels: None
Environment:

Clojure 1.6.0, Java 8, OS X 10.10.3



 Description   

To reproduce, simply run

$ lein try org.clojure/core.typed "0.2.87" org.clojure/tools.analyzer.jvm "0.6.5" org.clojure/clojure "1.6.0"

and then basically any attempt to use core.typed will fail with the same error, for example

user=> (require '[clojure.core.typed :as t])
nil
user=> (t/cf 1)
Initializing core.typed ...
Building core.typed base environments ...
Finished building base environments
"Elapsed time: 16052.550743 msecs"
core.typed initialized.

UnsupportedOperationException nth not supported on this type: Long clojure.lang.RT.nthFrom (RT.java:857)

note that there are similar combinations of versions that do work, such as

$ lein try org.clojure/core.typed "0.2.84" org.clojure/tools.analyzer.jvm "0.6.5" org.clojure/clojure "1.6.0"



 Comments   
Comment by Jakub Arnold [ 21/Apr/15 7:04 PM ]

Here are a few more detailed logs of different scenarios

broken `lein try org.clojure/core.typed "0.2.87" org.clojure/tools.analyzer.jvm "0.6.5" org.clojure/clojure "1.6.0"`
https://gist.github.com/darthdeus/5f3a40cdff8e21eed15d

working `lein try org.clojure/core.typed "0.2.84" org.clojure/tools.analyzer.jvm "0.6.6"` https://gist.github.com/darthdeus/6a3a7f5fb91073575f77

possibly related issue on `lein try org.clojure/core.typed "0.2.87" org.clojure/tools.analyzer.jvm "0.6.6"`
https://gist.github.com/darthdeus/88b5b8f94fafdb85d81f

and the original issue with a full stacktrace https://gist.github.com/darthdeus/1a071c829e2aa4b96a09





Generated at Tue Apr 28 13:30:49 CDT 2015 using JIRA 4.4#649-r158309.