import System.IO.Unsafe ( unsafePerformIO ) import Data.List ( sort ) import System.Environment ( getArgs ) import Text.Read ( readMaybe ) -- what it IO worked as any other thing in Haskell? doLog :: Show a => a -> a doLog x = unsafePerformIO $ putStr ("<" ++ show x ++ ">") >> pure x numlist, numlist2 :: [Int] numlist = [doLog 1, doLog 2, doLog 3, doLog 4, doLog 5, doLog 1, doLog 4] numlist2 = [doLog 4, doLog 2] results = [ "sum: " ++ show (sum numlist) , "foldr: " ++ show (foldr (+) 0 numlist) , "reverse: " ++ show (reverse numlist) , "sort: " ++ show (sort numlist) , "(!! 2): " ++ show (numlist !! 2) , "numlist2: " ++ show numlist2 ] main = getArgs >>= \a -> putStr . unlines $ case head' a >>= readMaybe of Just x -> [results !! x] Nothing -> results head' :: [a] -> Maybe a head' [] = Nothing head' (x:_) = Just x