Contar la frecuencia de cada elemento en una lista.

Intento escribir un programa que contará la frecuencia de cada elemento en una lista.

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

Puedes ver mi código en el siguiente enlace:http://codepad.org/nyIECIT2 En este código la salida de la función única sería así.

     In: "aabbcabb"
     Out: "abc"

Usando la salida de unique, contaremos la frecuencia de la lista de objetivos. Puedes ver el código aquí también:

    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") 

Pero en ghci 6.13 se muestran también otros tipos de error.

Pocos me preguntaron cuál es el propósito de usar [(== 'a'), (== ', b'), (== ', c')]. Lo que espero: si ref = "abc" y target = "aabbaacc" entonces

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

mostrará ["aaaa", "bb", "cc"] luego puedo usar la longitud del mapa sobre esto para obtener la frecuencia Aquí para filtrar la lista de acuerdo con la referencia que uso [(== 'a'), (== ' , b '), (==', c ')]

Asumo que hay un error lógico en [(== 'a'), (== ', b'), (== ', c')] aquí ..

Respuestas a la pregunta(2)

Su respuesta a la pregunta