module Main where main :: IO () main = interact translate translate :: String -> String translate = inHTML (byWords transWord) transWord :: String -> String transWord = reverse ---------------------------------------------------- -- auxiliaries byWords :: (String -> String) -> String -> String byWords f s = unwords [f w | w <- words s] byLines :: (String -> String) -> String -> String byLines f s = unlines [f w | w <- lines s] inHTML :: (String -> String) -> String -> String inHTML f = byLines (inHTMLPlus f) ---------------------------------------------------- ---- this will not be explained on the course ------ inHTMLPlus :: (String -> String) -> String -> String inHTMLPlus f [] = [] inHTMLPlus f ('>':s) = ">" ++ inHTMLPlus f s inHTMLPlus f s = let (s1,s2) = span (/= '<') s (s3,s4) = span (/= '>') s2 in f s1 ++ s3 ++ inHTMLPlus f s4 ----------------------------------------------------