Contagem de frequência de cada elemento em uma lista

Eu tento escrever um programa que contará a freqüência de cada elemento em uma lista.

    In: "aabbcabb"
    Out: [("a",3),("b",4),("c",1)]

Você pode ver meu código no seguinte link:http://codepad.org/nyIECIT2 Neste código, a saída da função exclusiva seria assim

     In: "aabbcabb"
     Out: "abc"

Usando a saída do exclusivo, contamos a frequência da lista de alvos. Você pode ver o código aqui também:

    frequencyOfElt xs=ans
       where ans=countElt(unique xs) xs
          unique []=[]
      unique xs=(head xs):(unique (filter((/=)(head xs))xs))
      countElt ref target=ans'
             where ans'=zip ref lengths
            lengths=map length $ zipWith($)(map[(=='a'),(==',b'),(==',c')](filter.(==))ref)(repeat target)

    Error:Syntax error in input (unexpected symbol "unique") 

Mas no ghci 6.13 outro tipo de erro está mostrando também

Poucos me perguntaram qual é o propósito de usar [(== 'a'), (== ', b'), (== ', c')]. O que eu espero: Se ref = "abc" e target = "aabbaacc" então

    zipWith($) (map filter ref)(repeat target)

vai mostrar ["aaaa", "bb", "cc"] então eu posso usar o tamanho do mapa sobre isso para obter a freqüência Aqui para lista de filtragem de acordo com o ref eu uso [(== 'a'), (= = ' , b '), (==', c ')]

Eu assumo que alguns erros lógicos estão [(== 'a'), (== ', b'), (== ', c')] aqui ..

questionAnswers(2)

yourAnswerToTheQuestion