f :: Ord a => [[a]] -> [[a]] f ls = [ [x1,x2,x3,x4] | let xs1 = head ls, x1 <- xs1, xs2 <- delete xs1 ls x2 <- xs2, x2 > x1, xs3 <- delete xs2 ls, x3 <- xs3, x3 > x2, xs4 <- delete xs3 ls, x4 <- xs4, x4 > xd ]