Concerning your first solution, I don't understand why you redefine Eq but not Ord instance. Ord will still work by comparing the tuples and not the first elements of said tuples.
Plus the good news is you don't have to do this: just use regular tuples and use sortBy or groupBy functions from Data.List with the 'on' function from Data.Function.
For instance your Eq instance could have been written
x == y = (==) `on` (fst . getTuple)

With regular tuples you can write "sortBy (compare `on` fst)".


Plus can you rewrite your original imperative algorithm with the right variable names? You're using a 'd' array that's not been defined.


2012/2/5 Haisheng Wu <freizl@gmail.com>
a = [1,1,1,1] 
b = [0,1,2,3] 
d = [0,0,0,0] 

for i in b: 
  for j in c: 
    if (i+j)<3: 
      d[i+j] += a[i]  

My just work implementation in Haskell
http://hpaste.org/57452

Another people implementation in Haskell with Monad and it turns out complex and very imperatively.
http://hpaste.org/57358

Do you have any cool solution in FP way?

Thanks.
-Simon

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe