I've added updated versions of 'show' and 'source' to a new lib named clojure.contrib.repl-utils
'show' is for exploring classes at the REPL. What's new is that it now displays the modifiers of the class and the parameter types for each method. 'source' tries to display the Clojure source for any Var. It now sports more robust logic for finding the source file and determining the end of the Var's definition. user=> (show 1/2) === public clojure.lang.Ratio === [ 0] <init> (BigInteger,BigInteger) [ 1] denominator : BigInteger [ 2] numerator : BigInteger [ 3] byteValue : byte () [ 4] compareTo : int (Object) [ 5] doubleValue : double () [ 6] equals : boolean (Object) [ 7] floatValue : float () [ 8] getClass : Class () [ 9] hashCode : int () [10] intValue : int () [11] longValue : long () [12] notify : void () [13] notifyAll : void () [14] shortValue : short () [15] toString : String () [16] wait : void () [17] wait : void (long) [18] wait : void (long,int) Note that 'show' takes instances or classes. Members are sorted by kind: static fields, static methods, constructors, instance fields, instance methods. Note that parameter package names and method modifiers are not displayed for brevity. For complete details on a member, append its number to the call: user=> (show 1/2 3) #<Method public byte java.lang.Number.byteValue()> This actually returns the method itself, and so can be used to construct more complex introspection expressions: user=> (show (.getType (show 1/2 1))) === public java.math.BigInteger === [ 0] static ONE : BigInteger [ 1] static TEN : BigInteger [ 2] static ZERO : BigInteger ...etc... Use of 'source' couldn't be simpler: user=> (source filter) (defn filter "Returns a lazy seq of the items in coll for which (pred item) returns true. pred must be free of side-effects." [pred coll] (when (seq coll) (if (pred (first coll)) (lazy-cons (first coll) (filter pred (rest coll))) (recur pred (rest coll))))) nil user=> (source clojure.zip/node) (defn node "Returns the node at loc" [loc] (loc 0)) nil --Chouser --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---