I saw this... and thought of you
http://dis.4chan.org/read/prog/1180896798/ (It's been a while since I touched Java, and I must confess I can't even comprehend this code...)
Andrew Coppin wrote:
http://dis.4chan.org/read/prog/1180896798/
(It's been a while since I touched Java, and I must confess I can't even comprehend this code...)
Look's like a bad done extension of the well-known function object pattern in oo design to allow currying. I would prefer the following much more natural implementation: // in Haskell: // type Fun cod dom = dom -> cod interface Fun<Cod, Dom> { Cod eval(Dom arg); } // in Haskell: // adder :: Fun (Fun Int Int) Int // adder = \a -> \b -> a + b final class Adder extends Fun<Fun<Integer, Integer>, Integer> { public Fun<Integer, Integer> eval(final Integer a) { return new Fun<Integer, Integer>() { public Integer eval(Integer b) { return a + b; } }; } } // in Haskell: // main = do let plus :: Fun (Fun Int Int) Int = adder // let succ :: Fun Int Int = adder 1 // let result = succ 41 // print result public class Test { public static void main(String[] args) { Fun<Fun<Integer, Integer>, Integer> plus = new Adder(); Fun<Integer, Integer> succ = plus.eval(1); Integer result = succ.eval(41) System.out.println(result); } } If you're interested in such stuff, check out this Book: Thomas Kühne, "A Functional Pattern System for Object-Oriented Design" http://www.mm.informatik.tu-darmstadt.de/%7Ekuehne/fps/ But most probably, you are neither interested nor impressed, because you know "the real thing". Tillmann
participants (2)
-
Andrew Coppin -
Tillmann Rendel