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 eval(Dom arg);
}
// in Haskell:
// adder :: Fun (Fun Int Int) Int
// adder = \a -> \b -> a + b
final class Adder extends Fun, Integer> {
public Fun eval(final Integer a) {
return new Fun() {
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, Integer> plus = new Adder();
Fun 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