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 
> <javascript:>> 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 
>> <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.

Reply via email to