charsCount String Char Int charsCount charsCount str charsCount str --

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
charsCount :: String -> [(Char, Int)]
charsCount [] = []
charsCount str = charsCount' str [] -- Вспомогательная функция с аргументом-списком
-- Когда пустая строка возвращаем наш массив кортежей (set)
where charsCount' [] set = set
-- Когда строка не пустая, добавляем символ в котреж и рекурсивно запускаемся
charsCount' (x:xs) set = charsCount' xs (addToSet x set)
-- Функция добавления символа к кортежу
addToSet char ((setCh, cnt):lastSet) | char == setCh = (setCh, cnt+1):lastSet
addToSet char ((setCh, cnt):lastSet) | otherwise = (setCh, cnt) : addToSet char lastSet
addToSet char [] = (char, 1):[]