http://code.google.com/r/srborlongan-picolisp/source/detail?r=cf63aa6f28cfead28c5a02ee3de4c322b5a3c9d7
I've changed the InvocationHandler in interface to return the correct Java object when used with interface with returning values. Example Java classes: @FunctionalInterface public interface Field<FIELD extends Enum<?>, VALUE> { public VALUE field(FIELD field); } @FunctionalInterface public interface User extends Field<User.Fields, String> { public enum Fields { firstName, lastName } public default String firstName() { return field(Fields.firstName); } public default String lastName() { return field(Fields.lastName); } } Example Ersatz PicoLisp code: (javaImport User) (de user (@FirstName @LastName) (User.new # (interface "User" "field" (curry (@FirstName @LastName) (Field) (cond ((= Field User.Fields.firstName) @FirstName) ((= Field User.Fields.lastName) @LastName) ) ) ) ) # Before (.field> (user "Albert" "Wily") User.Fields.firstName) # => $PicoLisp$Symbol (might not be useful for Java interoperability) # After (.field> (user "Albert" "Wily") User.Fields.firstName) # => $String (might be useful for Java interoperability) (.field> (user (.field> (user "Albert" "Wily") User.Fields.firstName) "Einstein") User.Fields.firstName) # => $String (still useful) As always, the srborlongan-picolisp repository is always in sync with mainline. Have fun! P.S. Next plan is to refactor the heck out of my old Java code into Java 8 code, which would then make it easy to translate them to Ersatz PicoLisp, which may eventually result in Plan Super-Omega Plus: rewrite Ersatz PicoLisp in Java 8, then rewrite resulting Java 8 code into (Java-6 compatible) Ersatz PicoLisp; Ersatz in Ersatz, for radical (slow-as-fossilized-carbonite-mollases) self-hosting capabilities. P.P.S. I have no idea how to call Java 8 default methods from objects created using Ersatz PicoLisp's interface method. Any suggestions? Samuel Dennis R. Borlongan