[Haskell-cafe] I saw this... and thought of you

Tillmann Rendel rendel at rbg.informatik.tu-darmstadt.de
Wed Jun 6 09:16:20 EDT 2007

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)

If you're interested in such stuff, check out this Book:

   Thomas Kühne, "A Functional Pattern System for Object-Oriented Design"

But most probably, you are neither interested nor impressed, because you 
know "the real thing".


More information about the Haskell-Cafe mailing list