
with which model in Combinatorics in mind do you want that function? with or without repetition? http://en.wikipedia.org/wiki/Combinatorics#Permutation_with_repetition the order matters and each object can be chosen more than once http://en.wikipedia.org/wiki/Combinatorics#Permutation_without_repetition the order matters and each object can be chosen only once http://en.wikipedia.org/wiki/Combinatorics#Combination_without_repetition the order does not matter and each object can be chosen only once http://en.wikipedia.org/wiki/Combinatorics#Combination_with_repetition the order does not matter and each object can be chosen more than once -------------------------------------------------- import Data.List perm3_with_rep,perm3_without_rep,comb3_with_rep,comb3_without_rep :: [a] -> [(a, a, a)] perm3_with_rep es = [(x,y,z)|x<-es,y<-es,z<-es] perm3_without_rep es = [(x,y,z)|let it s=zip s $ zipWith (++) (inits s) (tail $ tails s),(x,xr)<-it es,(y,yr)<-it xr,z<-yr] comb3_with_rep es = [(x,y,z)|let it=init.tails,xs@(x:_)<-it es,ys@(y:_)<-it xs,z<-ys] comb3_without_rep es = [(x,y,z)|let it=init.tails,(x:xr)<-it es,(y:yr)<-it xr,z<-yr] comb3_to_perm3 :: [(a, a, a)] -> [(a, a, a)] comb3_to_perm3 xyz = concat[perm_without_rep [x,y,z]|(x,y,z)<-xyz] -------------------------------------------------- - marc