{- Contar carateres num texto, lido linha-a-linha estado : Map Char Int -} import qualified Data.Map as Map import Data.Map (Map) main :: IO () main = loop Map.empty loop :: Map Char Int -> IO () loop count = do print count txt <- getLine -- txt :: [Char] -- let count' = update txt count let count' = Map.fromListWith (+) [(c,1) | c<-txt] -- contagens de txt let count'' = Map.unionWith (+) count count' loop count'' update :: String -> Map Char Int -> Map Char Int update [] count = count update (x:xs) count = update xs (Map.insertWith (+) x 1 count)