São possíveis sinônimos de tipo com restrições de classe de tipo?

Sinta-se livre para mudar o título, mas não tenho experiência suficiente para saber o que realmente está acontecendo.

Então, eu estava escrevendo um programa vagamente baseado emesta, e escrevi isso (como está no original)

type Row a    = [a]
type Matrix a = [Row a]

Nada de especial lá. No entanto, eu me vi escrevendo algumas funções com um tipo como este:

Eq a => Row a -> ...

Então pensei que talvez pudesse escrever essa restrição na definição de sinônimo de tipo, porque, na minha opinião, não deveria ser muito mais complicado, certo? Se o compilador puder trabalhar com isso em funções, ele deverá funcionar como um sinônimo de tipo. Não há aplicações parciais aqui ou qualquer coisa ou algum tipo de truque (aos meus olhos).

Então eu tentei isso:

type Row a = Eq a => [a]

Isso não funciona, e o compilador sugeriu ativarRankNTypes. A opção fez a compilação, mas as funções ainda exigiam que eu deixasse oEq a => nas suas declarações de tipo. Como um aparte, se eu tentasse também ter um sinônimo de tipo comotype Matrix a = [Row a] como antes, resulta em um erro.

Então, minhas perguntas são assim:

É possível ter um sinônimo de tipo com uma restrição de classe de tipo em sua definição?

Se não, por que?

O objetivo por trás dessa pergunta é alcançável de alguma outra maneira?

questionAnswers(2)

yourAnswerToTheQuestion