Re: Extend java class to participate in sequence operations

2015-03-18 Thread Juvenn Woo
So in Clojure, I'd have:

   (defrecord MyNode [^Node node]
clojure.lang. ISeq
 (seq [this] …))

Thanks Mikera! An enlightenment to me!





—
Sent from Mailbox

On Wed, Mar 18, 2015 at 2:11 PM, Mikera mike.r.anderson...@gmail.com
wrote:

 In that case, I would suggest writing a minimal wrapper, either in Java or 
 Clojure.
 To get the basic sequence operations, you can simply implement the 
 interface clojure.lang.ISeq on the wrapper.
 On Wednesday, 18 March 2015 09:17:09 UTC+8, juvenn wrote:

 Thanks Niels, but what if a java class is not available for rewrite? Say, 
 it is from an external library.
  
 —
 Sent from Mailbox https://www.dropbox.com/mailbox 


 On Tue, Mar 17, 2015 at 10:01 PM, Niels van Klaveren 
 niels.va...@gmail.com javascript: wrote:

 If a java class implements Iterable, it automatically supports seq.

 On Tuesday, March 17, 2015 at 11:34:17 AM UTC+1, juvenn wrote:

  Dear all,

 Given a node type from singly linked list:

 class Node {
 int val;
 Node next;
 }

 How do I extend it so `(seq node)` will return a sequence of values? And 
 generally first, rest, and next will work on node too.

 While in Java, we could define the class to implement Iterable to 
 achieve this. In Clojure we do have `extend-type`, but it seems not 
 accepting interfaces to extend, nor do I find protocol for seqable.

 So generally, given a class defined in Java, assuming it is not 
 available for rewrite, how shall we extend the class to participate in 
 sequence operations in Clojure?

 Thanks in advance!
  
 —
 Sent from Mailbox https://www.dropbox.com/mailbox 
  
  -- 
 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.

-- 
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: Extend java class to participate in sequence operations

2015-03-18 Thread Mikera
In that case, I would suggest writing a minimal wrapper, either in Java or 
Clojure.

To get the basic sequence operations, you can simply implement the 
interface clojure.lang.ISeq on the wrapper.

On Wednesday, 18 March 2015 09:17:09 UTC+8, juvenn wrote:

 Thanks Niels, but what if a java class is not available for rewrite? Say, 
 it is from an external library.
  
 —
 Sent from Mailbox https://www.dropbox.com/mailbox 


 On Tue, Mar 17, 2015 at 10:01 PM, Niels van Klaveren 
 niels.va...@gmail.com javascript: wrote:

 If a java class implements Iterable, it automatically supports seq.

 On Tuesday, March 17, 2015 at 11:34:17 AM UTC+1, juvenn wrote:

  Dear all,

 Given a node type from singly linked list:

 class Node {
 int val;
 Node next;
 }

 How do I extend it so `(seq node)` will return a sequence of values? And 
 generally first, rest, and next will work on node too.

 While in Java, we could define the class to implement Iterable to 
 achieve this. In Clojure we do have `extend-type`, but it seems not 
 accepting interfaces to extend, nor do I find protocol for seqable.

 So generally, given a class defined in Java, assuming it is not 
 available for rewrite, how shall we extend the class to participate in 
 sequence operations in Clojure?

 Thanks in advance!
  
 —
 Sent from Mailbox https://www.dropbox.com/mailbox 
  
  -- 
 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.


Extend java class to participate in sequence operations

2015-03-17 Thread Juvenn Woo
Dear all,

Given a node type from singly linked list:

class Node {
int val;
Node next;
}

How do I extend it so `(seq node)` will return a sequence of values? And 
generally first, rest, and next will work on node too.

While in Java, we could define the class to implement Iterable to achieve this. 
In Clojure we do have `extend-type`, but it seems not accepting interfaces to 
extend, nor do I find protocol for seqable.

So generally, given a class defined in Java, assuming it is not available for 
rewrite, how shall we extend the class to participate in sequence operations in 
Clojure?

Thanks in advance!

—
Sent from Mailbox

-- 
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: Extend java class to participate in sequence operations

2015-03-17 Thread Juvenn Woo
Thanks Niels, but what if a java class is not available for rewrite? Say, it is 
from an external library.



—
Sent from Mailbox

On Tue, Mar 17, 2015 at 10:01 PM, Niels van Klaveren
niels.vanklave...@gmail.com wrote:

 If a java class implements Iterable, it automatically supports seq.
 On Tuesday, March 17, 2015 at 11:34:17 AM UTC+1, juvenn wrote:

  Dear all,

 Given a node type from singly linked list:

 class Node {
 int val;
 Node next;
 }

 How do I extend it so `(seq node)` will return a sequence of values? And 
 generally first, rest, and next will work on node too.

 While in Java, we could define the class to implement Iterable to achieve 
 this. In Clojure we do have `extend-type`, but it seems not accepting 
 interfaces to extend, nor do I find protocol for seqable.

 So generally, given a class defined in Java, assuming it is not available 
 for rewrite, how shall we extend the class to participate in sequence 
 operations in Clojure?

 Thanks in advance!
  
 —
 Sent from Mailbox https://www.dropbox.com/mailbox 
  
 -- 
 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: Extend java class to participate in sequence operations

2015-03-17 Thread Niels van Klaveren
If a java class implements Iterable, it automatically supports seq.

On Tuesday, March 17, 2015 at 11:34:17 AM UTC+1, juvenn wrote:

  Dear all,

 Given a node type from singly linked list:

 class Node {
 int val;
 Node next;
 }

 How do I extend it so `(seq node)` will return a sequence of values? And 
 generally first, rest, and next will work on node too.

 While in Java, we could define the class to implement Iterable to achieve 
 this. In Clojure we do have `extend-type`, but it seems not accepting 
 interfaces to extend, nor do I find protocol for seqable.

 So generally, given a class defined in Java, assuming it is not available 
 for rewrite, how shall we extend the class to participate in sequence 
 operations in Clojure?

 Thanks in advance!
  
 —
 Sent from Mailbox https://www.dropbox.com/mailbox 
  

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