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 sve...@googlemail.com 
 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-17 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 sve...@googlemail.com 
 javascript: 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 sve...@googlemail.com 
 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 sve...@googlemail.com 
 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 

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 sve...@googlemail.com 
 javascript: 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 sve...@googlemail.com 
 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 sve...@googlemail.com 
 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 

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 sver...@googlemail.com
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 sve...@googlemail.com
 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 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 sver...@googlemail.com
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 sve...@googlemail.com
 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 sve...@googlemail.com
 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 

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 sver...@googlemail.com
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.


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 sver...@googlemail.com
 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 sve...@googlemail.com
 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 

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 sve...@googlemail.com 
 javascript: 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 sve...@googlemail.com 
 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 
 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 

core.typed question (maybe a bug?)

2015-04-16 Thread Sven Richter
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.


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 sve...@googlemail.com 
 javascript: 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 
 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.