import System.Environment mapFilter :: (a -> Maybe b) -> [a] -> [b] mapFilter fn = worker . map fn where worker (Nothing : rest) = worker rest worker ((Just x) : rest) = x : worker rest worker [] = [] translate :: String -> [String] -> [String] translate language = mapFilter worker where worker ('|':x:y:'>':line) | [x,y] == language = Just line | otherwise = Nothing worker line = Just line main :: IO () main = do args <- getArgs case args of [language] -> interact (unlines . translate (language) . lines) _ -> putStrLn "translator language"