Re: core.typed question (maybe a bug?)

2015-04-17 Thread Sven Richter
Hm, 

Is it possible that core.typed may be influenced by the repl state? New day 
and a new try I got these both working:

(t/ann dt->hiccup [(t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) 
t/Any t/Any *]) -> html-form-group])
(defmulti dt->hiccup (t/fn [col :- (t/HVec [Keyword (t/U Keyword (t/HVec 
[Keyword Number])) t/Any t/Any *])]
   (if (vector? (second col))
 (first (second col))
 (second col

and

(t/ann dt->hiccup [(t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) 
t/Any t/Any *]) -> html-form-group])
(defmulti dt->hiccup (t/fn [col :- (t/HVec [Keyword (t/U Keyword (t/HVec 
[Keyword Number])) t/Any t/Any *])]
   (let [[_ s] col]
 (if (vector? s) (first s) s

Which are the same basically regarding type declarations. Sorry for making such 
a noise, 
maybe a simple repl restart would have fixed this.

Thanks,
Sven



Am Donnerstag, 16. April 2015 22:43:41 UTC+2 schrieb Sven Richter:
>
> Hi,
>
> I tried both destructuring and the nth form instead of second and first. 
> None of which worked.
>
> However, if I change the Union to Intersection in 
>
> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>
> it works for the definition of the multimethod. Does that make sense? I 
> thought Union was either one type or the other.
>
> Thanks,
> Sven
>
>
> Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose 
> Bonnaire-Sergeant:
>>
>> I don't think second's type is is smart enough.
>>
>> Try using nth or destructuring instead:
>>
>> (let [[f s] v]
>>   (if (vector? s) (first s) s))
>>
>> or
>>
>> (if (vector? (nth v 1)) (first (nth v 1)) s)
>>
>> Thanks,
>> Ambrose
>>
>> On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter  
>> wrote:
>>
>>> Hi,
>>>
>>> I have this code:
>>>
>>> (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String}) 
>>> String]))
>>> (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) t/Any 
>>> *]))
>>> (defalias html-form-group (t/HVec [html-label html-form]))
>>>  
>>> (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) t/Any 
>>> t/Any *]) -> 
>>>html-form-group])
>>> (defmulti dt->hiccup (t/fn [col :- pt/et-column]
>>>(if (vector? (second col))
>>>  (first (second col))
>>>  (second col
>>>
>>> And here comes the error message when checking this function:
>>>
>>> Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function first 
>>> could not be applied to arguments:
>>> Polymorphic Variables:
>>> x
>>>  
>>> Domains:
>>> (t/HSequential [x t/Any *])
>>> (t/Option (t/EmptySeqable x))
>>> (t/NonEmptySeqable x)
>>> (t/Option (clojure.lang.Seqable x))
>>>  
>>> Arguments:
>>> (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number]))
>>>  
>>> Ranges:
>>> x :object {:path [(Nth 0)], :id 0}
>>> nil
>>> x
>>> (t/Option x)
>>>  
>>> in: (first (second col))
>>> in: (first (second col))
>>>  
>>>  
>>> ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core.
>>> clj:4403)
>>>
>>> My assumption is that the check (if (vector? (second col will return 
>>> only true if it is this type: (HVec [Keyword Number]). However, I have 
>>> the impression that core.typed does not resolve the if expression properly.
>>> Or maybe I am missing something completely.
>>>
>>> Any hints or recommendations?
>>>
>>> Thanks,
>>> Sven
>>>
>>>
>>>  -- 
>>> 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 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.

Re: core.typed question (maybe a bug?)

2015-04-16 Thread Sven Richter
I added your explanation the the wiki of core.typed: 
https://github.com/clojure/core.typed/wiki/Intersection-vs.-Union I hope 
that is fine for you.



Am Donnerstag, 16. April 2015 23:25:42 UTC+2 schrieb Ambrose 
Bonnaire-Sergeant:
>
> It might help thinking in terms of Java interfaces, Foo and Bar.
>
> (definterface Foo
>   (foo []))
> (definterface Bar
>   (bar []))
>
> (I Foo Bar) is a value that extends both Foo and Bar.
>
> (deftype IImp []
>   Foo
>   (foo [this])
>   Bar
>   (bar [this]))
>
> (->IImp) is of type Foo, Bar, (I Foo Bar) and (U Foo Bar).
>
> Assuming we assign (->IImp) the type (I Foo Bar), we can call these safely:
>
> (let [i :- (I Foo Bar), (->IImp)]
>  (.foo i)
>  (.bar i))
>
> A type that just implements Foo is not a Bar, so we can't claim it's a Foo 
> *and* a Bar.
>
> (deftype UImp []
>   Foo
>   (foo [this]))
>
> (->UImp) is of type Foo, and (U Foo Bar).
>
> Assuming we assign (->UImp) the type (U Foo Bar), the same operations now 
> must cast at runtime.
>
> (let [i :- (U Foo Bar), (->UImp)]
>  (if (instance? Foo)
>   (.foo i)
>   (.bar i))
>
>
> Thanks,
> Ambrose
>
> On Thu, Apr 16, 2015 at 5:15 PM, Sven Richter  > wrote:
>
>> I meant when I change:
>>
>> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])  
>> to  (t/HVec [Keyword (t/I Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>> 
>> ^^   
>>   
>> to  ^^
>> Still I think that making an intersection of it is wrong conceptually.
>>
>>
>> Thanks,
>> Sven
>>
>> Am Donnerstag, 16. April 2015 23:08:30 UTC+2 schrieb Ambrose 
>> Bonnaire-Sergeant:
>>>
>>> I don't see an intersection, what do you mean?
>>>
>>> Thanks,
>>> Ambrose
>>>
>>> On Thu, Apr 16, 2015 at 4:43 PM, Sven Richter  
>>> wrote:
>>>
 Hi,

 I tried both destructuring and the nth form instead of second and 
 first. None of which worked.

 However, if I change the Union to Intersection in 

 (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])

 it works for the definition of the multimethod. Does that make sense? I 
 thought Union was either one type or the other.

 Thanks,
 Sven


 Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose 
 Bonnaire-Sergeant:
>
> I don't think second's type is is smart enough.
>
> Try using nth or destructuring instead:
>
> (let [[f s] v]
>   (if (vector? s) (first s) s))
>
> or
>
> (if (vector? (nth v 1)) (first (nth v 1)) s)
>
> Thanks,
> Ambrose
>
> On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter  
> wrote:
>
>> Hi,
>>
>> I have this code:
>>
>> (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String
>> }) String]))
>> (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) 
>> t/Any *]))
>> (defalias html-form-group (t/HVec [html-label html-form]))
>>  
>> (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) 
>> t/Any t/Any *]) -> 
>>html-form-group])
>> (defmulti dt->hiccup (t/fn [col :- pt/et-column]
>>(if (vector? (second col))
>>  (first (second col))
>>  (second col
>>
>> And here comes the error message when checking this function:
>>
>> Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function 
>> first could not be applied to arguments:
>> Polymorphic Variables:
>> x
>>  
>> Domains:
>> (t/HSequential [x t/Any *])
>> (t/Option (t/EmptySeqable x))
>> (t/NonEmptySeqable x)
>> (t/Option (clojure.lang.Seqable x))
>>  
>> Arguments:
>> (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number])
>> )
>>  
>> Ranges:
>> x :object {:path [(Nth 0)], :id 0}
>> nil
>> x
>> (t/Option x)
>>  
>> in: (first (second col))
>> in: (first (second col))
>>  
>>  
>> ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core
>> .clj:4403)
>>
>> My assumption is that the check (if (vector? (second col will return 
>> only true if it is this type: (HVec [Keyword Number]). However, I 
>> have the impression that core.typed does not resolve the if expression 
>> properly.
>> Or maybe I am missing something completely.
>>
>> Any hints or recommendations?
>>
>> Thanks,
>> Sven
>>
>>
>>  -- 
>> 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 - pleas

Re: core.typed question (maybe a bug?)

2015-04-16 Thread Sven Richter
Now thats a really nice explanation of union versus intersection in termes 
of types. 

Thank you very much for that,
Sven

Am Donnerstag, 16. April 2015 23:25:42 UTC+2 schrieb Ambrose 
Bonnaire-Sergeant:
>
> It might help thinking in terms of Java interfaces, Foo and Bar.
>
> (definterface Foo
>   (foo []))
> (definterface Bar
>   (bar []))
>
> (I Foo Bar) is a value that extends both Foo and Bar.
>
> (deftype IImp []
>   Foo
>   (foo [this])
>   Bar
>   (bar [this]))
>
> (->IImp) is of type Foo, Bar, (I Foo Bar) and (U Foo Bar).
>
> Assuming we assign (->IImp) the type (I Foo Bar), we can call these safely:
>
> (let [i :- (I Foo Bar), (->IImp)]
>  (.foo i)
>  (.bar i))
>
> A type that just implements Foo is not a Bar, so we can't claim it's a Foo 
> *and* a Bar.
>
> (deftype UImp []
>   Foo
>   (foo [this]))
>
> (->UImp) is of type Foo, and (U Foo Bar).
>
> Assuming we assign (->UImp) the type (U Foo Bar), the same operations now 
> must cast at runtime.
>
> (let [i :- (U Foo Bar), (->UImp)]
>  (if (instance? Foo)
>   (.foo i)
>   (.bar i))
>
>
> Thanks,
> Ambrose
>
> On Thu, Apr 16, 2015 at 5:15 PM, Sven Richter  > wrote:
>
>> I meant when I change:
>>
>> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])  
>> to  (t/HVec [Keyword (t/I Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>> 
>> ^^   
>>   
>> to  ^^
>> Still I think that making an intersection of it is wrong conceptually.
>>
>>
>> Thanks,
>> Sven
>>
>> Am Donnerstag, 16. April 2015 23:08:30 UTC+2 schrieb Ambrose 
>> Bonnaire-Sergeant:
>>>
>>> I don't see an intersection, what do you mean?
>>>
>>> Thanks,
>>> Ambrose
>>>
>>> On Thu, Apr 16, 2015 at 4:43 PM, Sven Richter  
>>> wrote:
>>>
 Hi,

 I tried both destructuring and the nth form instead of second and 
 first. None of which worked.

 However, if I change the Union to Intersection in 

 (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])

 it works for the definition of the multimethod. Does that make sense? I 
 thought Union was either one type or the other.

 Thanks,
 Sven


 Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose 
 Bonnaire-Sergeant:
>
> I don't think second's type is is smart enough.
>
> Try using nth or destructuring instead:
>
> (let [[f s] v]
>   (if (vector? s) (first s) s))
>
> or
>
> (if (vector? (nth v 1)) (first (nth v 1)) s)
>
> Thanks,
> Ambrose
>
> On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter  
> wrote:
>
>> Hi,
>>
>> I have this code:
>>
>> (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String
>> }) String]))
>> (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) 
>> t/Any *]))
>> (defalias html-form-group (t/HVec [html-label html-form]))
>>  
>> (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) 
>> t/Any t/Any *]) -> 
>>html-form-group])
>> (defmulti dt->hiccup (t/fn [col :- pt/et-column]
>>(if (vector? (second col))
>>  (first (second col))
>>  (second col
>>
>> And here comes the error message when checking this function:
>>
>> Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function 
>> first could not be applied to arguments:
>> Polymorphic Variables:
>> x
>>  
>> Domains:
>> (t/HSequential [x t/Any *])
>> (t/Option (t/EmptySeqable x))
>> (t/NonEmptySeqable x)
>> (t/Option (clojure.lang.Seqable x))
>>  
>> Arguments:
>> (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number])
>> )
>>  
>> Ranges:
>> x :object {:path [(Nth 0)], :id 0}
>> nil
>> x
>> (t/Option x)
>>  
>> in: (first (second col))
>> in: (first (second col))
>>  
>>  
>> ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core
>> .clj:4403)
>>
>> My assumption is that the check (if (vector? (second col will return 
>> only true if it is this type: (HVec [Keyword Number]). However, I 
>> have the impression that core.typed does not resolve the if expression 
>> properly.
>> Or maybe I am missing something completely.
>>
>> Any hints or recommendations?
>>
>> Thanks,
>> Sven
>>
>>
>>  -- 
>> 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 you

Re: core.typed question (maybe a bug?)

2015-04-16 Thread Ambrose Bonnaire-Sergeant
It might help thinking in terms of Java interfaces, Foo and Bar.

(definterface Foo
  (foo []))
(definterface Bar
  (bar []))

(I Foo Bar) is a value that extends both Foo and Bar.

(deftype IImp []
  Foo
  (foo [this])
  Bar
  (bar [this]))

(->IImp) is of type Foo, Bar, (I Foo Bar) and (U Foo Bar).

Assuming we assign (->IImp) the type (I Foo Bar), we can call these safely:

(let [i :- (I Foo Bar), (->IImp)]
 (.foo i)
 (.bar i))

A type that just implements Foo is not a Bar, so we can't claim it's a Foo
*and* a Bar.

(deftype UImp []
  Foo
  (foo [this]))

(->UImp) is of type Foo, and (U Foo Bar).

Assuming we assign (->UImp) the type (U Foo Bar), the same operations now
must cast at runtime.

(let [i :- (U Foo Bar), (->UImp)]
 (if (instance? Foo)
  (.foo i)
  (.bar i))


Thanks,
Ambrose

On Thu, Apr 16, 2015 at 5:15 PM, Sven Richter 
wrote:

> I meant when I change:
>
> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
> to  (t/HVec [Keyword (t/I Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>
> ^^
> to  ^^
> Still I think that making an intersection of it is wrong conceptually.
>
>
> Thanks,
> Sven
>
> Am Donnerstag, 16. April 2015 23:08:30 UTC+2 schrieb Ambrose
> Bonnaire-Sergeant:
>>
>> I don't see an intersection, what do you mean?
>>
>> Thanks,
>> Ambrose
>>
>> On Thu, Apr 16, 2015 at 4:43 PM, Sven Richter 
>> wrote:
>>
>>> Hi,
>>>
>>> I tried both destructuring and the nth form instead of second and first.
>>> None of which worked.
>>>
>>> However, if I change the Union to Intersection in
>>>
>>> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>>>
>>> it works for the definition of the multimethod. Does that make sense? I 
>>> thought Union was either one type or the other.
>>>
>>> Thanks,
>>> Sven
>>>
>>>
>>> Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose
>>> Bonnaire-Sergeant:

 I don't think second's type is is smart enough.

 Try using nth or destructuring instead:

 (let [[f s] v]
   (if (vector? s) (first s) s))

 or

 (if (vector? (nth v 1)) (first (nth v 1)) s)

 Thanks,
 Ambrose

 On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter 
 wrote:

> Hi,
>
> I have this code:
>
> (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String}
> ) String]))
> (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String})
> t/Any *]))
> (defalias html-form-group (t/HVec [html-label html-form]))
>
> (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number]))
> t/Any t/Any *]) ->
>html-form-group])
> (defmulti dt->hiccup (t/fn [col :- pt/et-column]
>(if (vector? (second col))
>  (first (second col))
>  (second col
>
> And here comes the error message when checking this function:
>
> Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function
> first could not be applied to arguments:
> Polymorphic Variables:
> x
>
> Domains:
> (t/HSequential [x t/Any *])
> (t/Option (t/EmptySeqable x))
> (t/NonEmptySeqable x)
> (t/Option (clojure.lang.Seqable x))
>
> Arguments:
> (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number]))
>
> Ranges:
> x :object {:path [(Nth 0)], :id 0}
> nil
> x
> (t/Option x)
>
> in: (first (second col))
> in: (first (second col))
>
>
> ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core.
> clj:4403)
>
> My assumption is that the check (if (vector? (second col will return
> only true if it is this type: (HVec [Keyword Number]). However, I
> have the impression that core.typed does not resolve the if expression
> properly.
> Or maybe I am missing something completely.
>
> Any hints or recommendations?
>
> Thanks,
> Sven
>
>
>  --
> 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

Re: core.typed question (maybe a bug?)

2015-04-16 Thread Sven Richter
I meant when I change:

(t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])  
to  (t/HVec [Keyword (t/I Keyword (t/HVec [Keyword Number])) t/Any t/Any *])

^^  
   
to  ^^
Still I think that making an intersection of it is wrong conceptually.


Thanks,
Sven

Am Donnerstag, 16. April 2015 23:08:30 UTC+2 schrieb Ambrose 
Bonnaire-Sergeant:
>
> I don't see an intersection, what do you mean?
>
> Thanks,
> Ambrose
>
> On Thu, Apr 16, 2015 at 4:43 PM, Sven Richter  > wrote:
>
>> Hi,
>>
>> I tried both destructuring and the nth form instead of second and first. 
>> None of which worked.
>>
>> However, if I change the Union to Intersection in 
>>
>> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>>
>> it works for the definition of the multimethod. Does that make sense? I 
>> thought Union was either one type or the other.
>>
>> Thanks,
>> Sven
>>
>>
>> Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose 
>> Bonnaire-Sergeant:
>>>
>>> I don't think second's type is is smart enough.
>>>
>>> Try using nth or destructuring instead:
>>>
>>> (let [[f s] v]
>>>   (if (vector? s) (first s) s))
>>>
>>> or
>>>
>>> (if (vector? (nth v 1)) (first (nth v 1)) s)
>>>
>>> Thanks,
>>> Ambrose
>>>
>>> On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter  
>>> wrote:
>>>
 Hi,

 I have this code:

 (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String}) 
 String]))
 (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) t
 /Any *]))
 (defalias html-form-group (t/HVec [html-label html-form]))
  
 (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) t
 /Any t/Any *]) -> 
html-form-group])
 (defmulti dt->hiccup (t/fn [col :- pt/et-column]
(if (vector? (second col))
  (first (second col))
  (second col

 And here comes the error message when checking this function:

 Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function 
 first could not be applied to arguments:
 Polymorphic Variables:
 x
  
 Domains:
 (t/HSequential [x t/Any *])
 (t/Option (t/EmptySeqable x))
 (t/NonEmptySeqable x)
 (t/Option (clojure.lang.Seqable x))
  
 Arguments:
 (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number]))
  
 Ranges:
 x :object {:path [(Nth 0)], :id 0}
 nil
 x
 (t/Option x)
  
 in: (first (second col))
 in: (first (second col))
  
  
 ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core.
 clj:4403)

 My assumption is that the check (if (vector? (second col will return 
 only true if it is this type: (HVec [Keyword Number]). However, I have 
 the impression that core.typed does not resolve the if expression properly.
 Or maybe I am missing something completely.

 Any hints or recommendations?

 Thanks,
 Sven


  -- 
 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 
>> 
>> 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 clojure@googlegroups.com
Note that posts from 

Re: core.typed question (maybe a bug?)

2015-04-16 Thread Ambrose Bonnaire-Sergeant
Oh, you changed it to (t/HVec [Keyword (t/I Keyword (t/HVec [Keyword
Number])) t/Any t/Any *])?

Unions are like `or`, intersections like `and`. This might work for
checking the definition, as function bodies are
checked with a set of assumptions about parameter types.

However it should be impossible to call this function as you cannot
construct a type of (I Keyword (HVec ...)).

Thanks,
Ambrose

On Thu, Apr 16, 2015 at 5:07 PM, Ambrose Bonnaire-Sergeant <
abonnaireserge...@gmail.com> wrote:

> I don't see an intersection, what do you mean?
>
> Thanks,
> Ambrose
>
> On Thu, Apr 16, 2015 at 4:43 PM, Sven Richter 
> wrote:
>
>> Hi,
>>
>> I tried both destructuring and the nth form instead of second and first.
>> None of which worked.
>>
>> However, if I change the Union to Intersection in
>>
>> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>>
>> it works for the definition of the multimethod. Does that make sense? I 
>> thought Union was either one type or the other.
>>
>> Thanks,
>> Sven
>>
>>
>> Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose
>> Bonnaire-Sergeant:
>>>
>>> I don't think second's type is is smart enough.
>>>
>>> Try using nth or destructuring instead:
>>>
>>> (let [[f s] v]
>>>   (if (vector? s) (first s) s))
>>>
>>> or
>>>
>>> (if (vector? (nth v 1)) (first (nth v 1)) s)
>>>
>>> Thanks,
>>> Ambrose
>>>
>>> On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter 
>>> wrote:
>>>
 Hi,

 I have this code:

 (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String})
 String]))
 (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) t
 /Any *]))
 (defalias html-form-group (t/HVec [html-label html-form]))

 (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) t
 /Any t/Any *]) ->
html-form-group])
 (defmulti dt->hiccup (t/fn [col :- pt/et-column]
(if (vector? (second col))
  (first (second col))
  (second col

 And here comes the error message when checking this function:

 Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function
 first could not be applied to arguments:
 Polymorphic Variables:
 x

 Domains:
 (t/HSequential [x t/Any *])
 (t/Option (t/EmptySeqable x))
 (t/NonEmptySeqable x)
 (t/Option (clojure.lang.Seqable x))

 Arguments:
 (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number]))

 Ranges:
 x :object {:path [(Nth 0)], :id 0}
 nil
 x
 (t/Option x)

 in: (first (second col))
 in: (first (second col))


 ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core.
 clj:4403)

 My assumption is that the check (if (vector? (second col will return
 only true if it is this type: (HVec [Keyword Number]). However, I have
 the impression that core.typed does not resolve the if expression properly.
 Or maybe I am missing something completely.

 Any hints or recommendations?

 Thanks,
 Sven


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

-- 
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

Re: core.typed question (maybe a bug?)

2015-04-16 Thread Ambrose Bonnaire-Sergeant
I don't see an intersection, what do you mean?

Thanks,
Ambrose

On Thu, Apr 16, 2015 at 4:43 PM, Sven Richter 
wrote:

> Hi,
>
> I tried both destructuring and the nth form instead of second and first.
> None of which worked.
>
> However, if I change the Union to Intersection in
>
> (t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])
>
> it works for the definition of the multimethod. Does that make sense? I 
> thought Union was either one type or the other.
>
> Thanks,
> Sven
>
>
> Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose
> Bonnaire-Sergeant:
>>
>> I don't think second's type is is smart enough.
>>
>> Try using nth or destructuring instead:
>>
>> (let [[f s] v]
>>   (if (vector? s) (first s) s))
>>
>> or
>>
>> (if (vector? (nth v 1)) (first (nth v 1)) s)
>>
>> Thanks,
>> Ambrose
>>
>> On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter 
>> wrote:
>>
>>> Hi,
>>>
>>> I have this code:
>>>
>>> (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String})
>>> String]))
>>> (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) t/Any
>>> *]))
>>> (defalias html-form-group (t/HVec [html-label html-form]))
>>>
>>> (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) t/Any
>>> t/Any *]) ->
>>>html-form-group])
>>> (defmulti dt->hiccup (t/fn [col :- pt/et-column]
>>>(if (vector? (second col))
>>>  (first (second col))
>>>  (second col
>>>
>>> And here comes the error message when checking this function:
>>>
>>> Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function first
>>> could not be applied to arguments:
>>> Polymorphic Variables:
>>> x
>>>
>>> Domains:
>>> (t/HSequential [x t/Any *])
>>> (t/Option (t/EmptySeqable x))
>>> (t/NonEmptySeqable x)
>>> (t/Option (clojure.lang.Seqable x))
>>>
>>> Arguments:
>>> (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number]))
>>>
>>> Ranges:
>>> x :object {:path [(Nth 0)], :id 0}
>>> nil
>>> x
>>> (t/Option x)
>>>
>>> in: (first (second col))
>>> in: (first (second col))
>>>
>>>
>>> ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core.
>>> clj:4403)
>>>
>>> My assumption is that the check (if (vector? (second col will return
>>> only true if it is this type: (HVec [Keyword Number]). However, I have
>>> the impression that core.typed does not resolve the if expression properly.
>>> Or maybe I am missing something completely.
>>>
>>> Any hints or recommendations?
>>>
>>> Thanks,
>>> Sven
>>>
>>>
>>>  --
>>> 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 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.
>

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


Re: core.typed question (maybe a bug?)

2015-04-16 Thread Sven Richter
Hi,

I tried both destructuring and the nth form instead of second and first. 
None of which worked.

However, if I change the Union to Intersection in 

(t/HVec [Keyword (t/U Keyword (t/HVec [Keyword Number])) t/Any t/Any *])

it works for the definition of the multimethod. Does that make sense? I thought 
Union was either one type or the other.

Thanks,
Sven


Am Donnerstag, 16. April 2015 21:44:25 UTC+2 schrieb Ambrose 
Bonnaire-Sergeant:
>
> I don't think second's type is is smart enough.
>
> Try using nth or destructuring instead:
>
> (let [[f s] v]
>   (if (vector? s) (first s) s))
>
> or
>
> (if (vector? (nth v 1)) (first (nth v 1)) s)
>
> Thanks,
> Ambrose
>
> On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter  > wrote:
>
>> Hi,
>>
>> I have this code:
>>
>> (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String}) 
>> String]))
>> (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) t/Any 
>> *]))
>> (defalias html-form-group (t/HVec [html-label html-form]))
>>  
>> (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) t/Any 
>> t/Any *]) -> 
>>html-form-group])
>> (defmulti dt->hiccup (t/fn [col :- pt/et-column]
>>(if (vector? (second col))
>>  (first (second col))
>>  (second col
>>
>> And here comes the error message when checking this function:
>>
>> Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function first 
>> could not be applied to arguments:
>> Polymorphic Variables:
>> x
>>  
>> Domains:
>> (t/HSequential [x t/Any *])
>> (t/Option (t/EmptySeqable x))
>> (t/NonEmptySeqable x)
>> (t/Option (clojure.lang.Seqable x))
>>  
>> Arguments:
>> (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number]))
>>  
>> Ranges:
>> x :object {:path [(Nth 0)], :id 0}
>> nil
>> x
>> (t/Option x)
>>  
>> in: (first (second col))
>> in: (first (second col))
>>  
>>  
>> ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core.
>> clj:4403)
>>
>> My assumption is that the check (if (vector? (second col will return only 
>> true if it is this type: (HVec [Keyword Number]). However, I have the 
>> impression that core.typed does not resolve the if expression properly.
>> Or maybe I am missing something completely.
>>
>> Any hints or recommendations?
>>
>> Thanks,
>> Sven
>>
>>
>>  -- 
>> 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 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.


Re: core.typed question (maybe a bug?)

2015-04-16 Thread Ambrose Bonnaire-Sergeant
I don't think second's type is is smart enough.

Try using nth or destructuring instead:

(let [[f s] v]
  (if (vector? s) (first s) s))

or

(if (vector? (nth v 1)) (first (nth v 1)) s)

Thanks,
Ambrose

On Thu, Apr 16, 2015 at 3:39 PM, Sven Richter 
wrote:

> Hi,
>
> I have this code:
>
> (defalias html-label (t/HVec [Keyword (t/HMap :mandatory {:for String})
> String]))
> (defalias html-form (t/HVec [Keyword (t/HMap :mandatory {:id String}) t/Any
> *]))
> (defalias html-form-group (t/HVec [html-label html-form]))
>
> (t/ann dt->hiccup [(HVec [Keyword (U Keyword (HVec [Keyword Number])) t/Any
> t/Any *]) ->
>html-form-group])
> (defmulti dt->hiccup (t/fn [col :- pt/et-column]
>(if (vector? (second col))
>  (first (second col))
>  (second col
>
> And here comes the error message when checking this function:
>
> Type Error (leiningen/td_to_hiccup.clj:25:34) Polymorphic function first
> could not be applied to arguments:
> Polymorphic Variables:
> x
>
> Domains:
> (t/HSequential [x t/Any *])
> (t/Option (t/EmptySeqable x))
> (t/NonEmptySeqable x)
> (t/Option (clojure.lang.Seqable x))
>
> Arguments:
> (t/U Keyword (t/HVec [clojure.lang.Keyword java.lang.Number]))
>
> Ranges:
> x :object {:path [(Nth 0)], :id 0}
> nil
> x
> (t/Option x)
>
> in: (first (second col))
> in: (first (second col))
>
>
> ExceptionInfo Type Checker: Found 1 error  clojure.core/ex-info (core.clj:
> 4403)
>
> My assumption is that the check (if (vector? (second col will return only
> true if it is this type: (HVec [Keyword Number]). However, I have the
> impression that core.typed does not resolve the if expression properly.
> Or maybe I am missing something completely.
>
> Any hints or recommendations?
>
> Thanks,
> Sven
>
>
>  --
> 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.
>

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