That's much clearer now. Thanks a lot.
On Wednesday, October 15, 2014 5:46:37 PM UTC-5, Ambrose Bonnaire-Sergeant wrote: > > The :- is just a bit of syntax to signify an annotation. As a rule, it > goes *after* > the form you might expect to attach metadata to. > > eg. (t/fn [a :- Int] :- Num ....) is [Int -> Num] > (t/let [a :- Int, 1] ...) checks 1 as being under Int. > (t/let [[a b] :- '[Num Num], [1 2]] ...) checks [1 2] as under > '[Num Num], then assigns whatever expression is to the left the type '[Num > Num] > (t/for [[a b] :- '[Num Num], foo] :- Ret e) assigns the left hand > side of the binder type '[Num Num], where the right hand side is (U nil > (Seqable '[Num Num])). This is because every iteration [a b] is an element > of foo. > The return type Ret is similarly for one iteration, and the inferred > type will be (Seq Ret). > > Thanks, > Ambrose > > > On Wed, Oct 15, 2014 at 6:34 PM, kurofune <jessel...@gmail.com > <javascript:>> wrote: > >> Thanks Ambrose, >> >> It makes way better sense after looking at your gist. I still don't >> *quite* understand the :- syntax, though. Is it just introducing a type >> declaration to the data structure that comes after it? >> >> This is a super cool project, by the way. >> >> K >> >> >> On Wednesday, October 15, 2014 3:14:58 PM UTC-5, Ambrose >> Bonnaire-Sergeant wrote: >>> >>> Hi, >>> >>> The issue is that you can't use clojure.core/for in typed code. >>> >>> You must use clojure.core.typed/for >>> <http://www.google.com/url?q=http%3A%2F%2Fclojure.github.io%2Fcore.typed%2F%23clojure.core.typed%2Ffor&sa=D&sntz=1&usg=AFQjCNHQ7AqglYarx-OVAqx1sUXcO4c9vw>, >>> >>> and annotate the parameters and expected type. >>> >>> (ann map-span (All [x y y1] [(Map x y) [y -> y1] -> (Map x y1)])) >>> (defn map-span [m f] >>> (into {} (t/for [[k v] :- '[x y] m] :- '[x y1] >>> [k (f v)]))) >>> >>> Here's a real gist >>> <https://gist.github.com/frenchy64/176fa8aadfd5b0cbfc09>. >>> >>> Thanks, >>> Ambrose >>> >>> On Wed, Oct 15, 2014 at 2:28 PM, kurofune <jessel...@gmail.com> wrote: >>> >>>> Hi everyone, >>>> >>>> I am learning core.typed and ran into a stumbling block. When I use >>>> annotations on normal functions and run 'check-ns', things work out ok, >>>> >>>> ;; works as expected >>>>> (ann plus1 [Number -> Number]) >>>>> (defn plus1 [n] (+ n 1)) >>>>> >>>>> ;; Works as expected >>>>> (ann mult-arity [Number String -> (HMap :mandatory {:a Number :b >>>>> String})]) >>>>> (defn mult-arity [n s] {:a n :b s}) >>>> >>>> >>>> >>>> but with functions that use destructuring in their body, I run into >>>> problems. >>>> >>>> >>>> ;; Does not work. >>>>> (ann map-span [Map Fn -> Map]) >>>>> (defn map-span [m f] (into {} (for [[k v] m] [k (f v)]))) >>>>> >>>> >>>> >>>> clojure.lang.ExceptionInfo: Type Checker: Found 8 errors :: >>>> {:type-error :top-level-error, :errors (#<ExceptionInfo >>>> clojure.lang.ExceptionInfo: Polymorphic static method clojure.lang.RT/nth >>>> could not be applied to arguments: Polymorphic Variables: x y Domains: (I >>>> (CountRange 1) (U (I (clojure.lang.Seqable x) clojure.lang.Sequential) >>>> (Indexed x))) (Val 0) Any (U nil (I (clojure.lang.Seqable x) >>>> clojure.lang.Sequential) (Indexed x)) Int y Arguments: Any (Val 0) nil >>>> Ranges: x >>>> (U x y) ... >>>> >>>> >>>> ;; This also throws errors at the repl. >>>>> (cf (fn [m f] (into {} (for [[k v] m] [k (f v)]))) [Map Fn -> Map]) >>>> >>>> >>>> >>>> >>>> I have been on the core.typed wiki and googled around but to no avail. >>>> I have also used lighter amounts of destructuring in the function >>>> parameters and run into similar errors. I am having trouble even >>>> understanding the error messages (even after reading the pertinent wiki >>>> page) so if someone could give me some insights on how to do this >>>> properly, >>>> I would really appreciate it. >>>> >>>> K >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clo...@googlegroups.com >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> clojure+u...@googlegroups.com >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to clojure+u...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.