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.

Reply via email to