
"Simon Marlow"
comparing :: (Ord a) => (b -> a) -> b -> b -> Ordering comparing p x y = compare (p x) (p y)
sortBy (comparing fst)
is just too cute not to have. Any objections?
Looks good to me.
readM :: (Monad m, Read a) => String -> m a
Also subsumes System.IO.readIO. Looks useful to me.
Yup.
selections :: [a] -> [(a,[a])] selections [] = [] selections (x:xs) = (x,xs) : [ (y,x:ys) | (y,ys) <- selections xs ]
permutations :: [a] -> [[a]] permutations [] = [[]] permutations xs = [ y : zs | (y,ys) <- selections xs , zs <- permutations ys ]
Here's another one. I'm not sure what to call it, since 'permutation' means something subtly different. -- Given a list of alphabets, return all possible strings with one -- symbol chosen from each alphabet respectively. permute :: [[a]] -> [[a]] permute [] = [[]] permute (xs:xss) = [ f:fs | f <- xs, fs <- permute xss ] Regards, Malcolm