Qual é o efeito dos sinônimos de tipo nas instâncias das classes de tipo? O que o pragma TypeSynonymInstances no GHC faz?

eu estou lendoMundo Real Haskell Pg 151, e observei a seguinte passagem por mais de uma hora:

Lembre-se de que String é sinônimo de [Char], que por sua vez é o tipo [a] em que Char é substituído pelo parâmetro de tipo a. De acordo com as regras de Haskell 98, não podemos fornecer um tipo no lugar de um parâmetro de tipo quando escrevemos uma instância. Em outras palavras, seria legal escrevermos uma instância para [a], mas não para [Char]. 16 comentários 5335

Simplesmente não está afundando.a cópia (gratuita e não pirateada) do capítulo 6 da RWH Entendomuito de outras pessoas estão realmente sofrendo com isso. Ainda não entendi pelos comentários ...

Em primeiro lugar, tudo sobre isso me confunde; portanto, se achar que pode explicar algo sobre essa passagem, ouTypeSynonymInstances por favor faça.

Aqui está o meu problema:

Int é umconstrutor de dadosString é umconstrutor de dados E digite sinônimo

Agora não posso responder a estas perguntas:

Por que um sinônimo de tipo impediria de tornar o tipo um membro de uma classe de tipo (estou procurando por algum motivo que provavelmente esteja relacionado à compilação ou implementação de um sinônimo de tipo)?Por que os designers da linguagem não queriam essa sintaxe (estou pedindo uma teoria extensa do raciocínio ou símbolos matemáticos unicode).Eu vejo essa linha"o tipo [a] em que Char é substituído pelo parâmetro de tipo a"e quero saber por que não posso substituí-lo por esse"o tipo a em que Int é substituído pelo parâmetro de tipo a".

Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion