module Main where import Text.Read import System.Environment import System.Exit (exitWith, ExitCode(ExitFailure)) import Data.List (delete, intercalate) selection :: Ord a => [a] -> [a] selection xs = selection'  xs where selection' :: Ord a => [a] -> [a] -> [a] selection' ss  = ss selection' ss us = selection' (ss ++ [x]) (delete x us) where x = minimum us headMaybe :: [a] -> Maybe a headMaybe  = Nothing headMaybe (x:xs) = Just x -- Converts string in format "1, 2, 3" to a Maybe list of int stringToListMaybe :: String -> Maybe [Int] stringToListMaybe str = readMaybe $ "[" ++ str ++ "]" :: Maybe [Int] -- Ensure that a list contains at least two elements verifyListLength :: Ord a => [a] -> Maybe [a] verifyListLength  = Nothing verifyListLength [x] = Nothing verifyListLength (x:xs) = Just (x:xs) listToString :: [Int] -> String listToString = intercalate ", " . map show main :: IO () main = do args <- getArgs let xs = headMaybe args >>= stringToListMaybe >>= verifyListLength case xs of Nothing -> do putStrLn "Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"" exitWith $ ExitFailure 1 Just xs -> putStrLn $ listToString $ selection xs
If you see anything you’d like to change or update, please consider contributing.
Note: The solution shown above is the current solution in the Sample Programs repository as of Mar 26 2019 01:28:05. The solution was first committed on Dec 02 2018 21:27:19. As a result, documentation below may be outdated.
No ‘How to Implement the Solution’ section available. Please consider contributing.
No ‘How to Run the Solution’ section available. Please consider contributing.