atualizaCatalogo f = [(a, abs b, b<0) | (a, b) <- f]
Isso deveria resolver, e resolve quando eu uso o GHCi. Pela lógica, a compreensão de lista pega cada tupla da lista e monta uma tripla com a resposta.
Mas se eu receber uma lista vazia, o que faço? Por que o GHCi aceita mas o Spec não aceita? Por que um erro num dos casos de um dos exercícios impede a compilação da lista toda?
Sobre conversão de Int pra Double, eu não faço ideia de como faz, os resultados do google são muito escassos e muito difíceis de entender.