My proposal for the Haskell style of Prelude, Library was -------------------------------------------------------------- to minimize the number of function names using options. Thus, we see in ghc-0.26 library quicksort :: (a -> a -> Bool) -> [a] -> [a] sortLt :: (a -> a -> Bool) -> [a] -> [a] stableSortLt :: (a -> a -> Bool) -> [a] -> [a] I think, it should be like this: sort :: String -> (a -> a -> Bool) -> [a] -> [a] --mode sort mode cp xs = (case mode of "" -> quick xs "lt" -> lt xs "st" -> stable xs _ -> error "(sort ..): wrong mode" ) where quick xs = ... lt xs = ... stable xs = ... This implies that if you recently have only one variant of `sort', still introduce the mode String in the format, to preserve room for the future versions - if they are likely to appear. ------------------------------------------------------------------- Alastair Reid writes > IMHO, this would be a major mistake: > 1) there is no reasonable way for the compiler to check that you're > using a sensible string. > 2) If different implementations add their own sorting functions, > (ie further magical strings) we'll get code with very subtle > portability problems (ie it will compile but will fail at runtime) > 3) programmers despairing of (1) and (2) will add the definitions: > quicksort = sort "" > sortLt = sort "lt" > stableSortLt = sort "st" > bringing back all the old names but reducing portability > 4) those string comparisions at the start of every sort are > inefficient. -------------------------------------------------------------------- I do not agree with this. First, a very little improving: let the above "case" be (case mode of "lt" -> lt xs "st" -> stable xs "q" -> quick xs _ -> lt xs ) where lt xs = ... stable xs = ... Now the counter-argumentation: 4) In the worst case of the default mode, we have 3 comparisons of kind " first letter of mode is 'l' " - just 3 elementary steps - before starting the real sorting. Are you saying seriously that this would slow down the program ? As they say, "Effectivity is a matter of getting the costs into proportion" ... 1) With this new "case", the sorting will perform correct for *any* mode string. Besides, are we so frightened when, say (logarithm x) yeilds run-time error report on x = 0 ? 2) If an implementator wishes to add other modes, of course, she should put a *new function* with all its modes (and now they may partly repeat the old ones) into the * implementation-dependent library*. Standard prelude is not a subject for the implementation changes. Am I missing something ? The suggestion was only for Standard prelude or Standard library. Standard modes may change only with the changes of the standard. No portability problems arise here. > 3) programmers despairing of (1) and (2) will add the definitions: ... > sortLt = sort "lt" ... > bringing back all the old names but reducing portability. Portability is preserved, as it was marked earlier. Besides, applying sortLt instead of sort "lt", add23 instead of (add 23) or (+ 23), ... is evidently a bad syntax, bad style. Standard prelude should not provoke user to copy a bad style. Sergey Mechveliani [EMAIL PROTECTED]