-- Written by Mohit Jain
-- Problem statement
-- Reverse every word of the string
-- (Convert multiple spaces into one space)
main = reverseAndPrint "This is a test string"
reverseAndPrint = putStr . unwords . map reverseWord . words
-- reverseWord [] = ERROR!!!
reverseWord x = if preserveLastChar then revInitAndAddLastChar else revX where
preserveLastChar = elem lastChar ".,"
lastChar = last x
revInitAndAddLastChar = revInitX ++ [lastChar]
revInitX = reverse . init $ x
revX = reverse x