I have come up with this myself ^_^
mps :: [a] → [[a]] → [[a]]
mps [] _ = []
mps _ [] = []
mps (x:xs) yss = map (x:) yss ++ mps xs yss
pms :: [a] → Int → [[a]]
pms [] _ = [[]]
pms _ 0 = [[]]
pms xxs n = mps xxs (pms (xxs) (n - 1))
-- now bpms can pointlessly be redefined as
bpms = pms [False,True]
How can I make a generic permutations function?
-- boolean permutations
bpms :: Int → [[Bool]]
bpms 0 = [[]]
bpms n = map (False:) bss ++ map (True:) bss
where
bss = bpms (n - 1)
-- generic permutations
pms a :: Int → [[a]]
Best Regards,
Cetin Sert