Existe uma diferença entre as assinaturas de tipo a -> b -> a e c -> a -> c?

16

Esta questão é uma questão teórica sobre funções Haskell que pode receber argumentos de qualquer tipo. Existe uma diferença entre a maneira como funciona com as assinaturas de tipo de

a -> b -> a 

e

c -> a -> c 

são instanciados? Qualquer ajuda é apreciada.

Dreana
fonte
6
Não, você simplesmente alterou o nome das variáveis ​​de tipo . Contanto que você não renomeie uma variável para outra variável (de modo que haja um conflito de nome), não há problema.
Willem Van Onsem 27/10/19
Depende se / como as variáveis ​​de tipo estão vinculadas em outro lugar.
Bergi 28/10/19

Respostas:

17

Não há diferença. Desde a, be ccomeçar com uma letra minúscula , estes são variáveis . Você pode renomear variáveis, e isso permanece o mesmo, desde que duas (ou mais) variáveis ​​não entrem em conflito .

Tais conflitos podem ocorrer se você renomear uma variável com o mesmo nome que outra variável ou quando você renomeia duas (ou mais) variáveis ​​com o mesmo novo nome. Se você renomeasse a variável, apor exemplo, bno seu primeiro fragmento de código, obteríamos b -> b -> b, mas isso não é o mesmo, desde então, reforçamos que o primeiro e o segundo parâmetro são do mesmo tipo. Enquanto na sua assinatura de tipo, temos a liberdade de escolher dois tipos que podem ser iguais, mas isso não é necessário.

Willem Van Onsem
fonte
16

Não. Pense a -> b -> acomo This Type -> Another Type -> This Type. Então, ambos se encaixam em determinado padrão. No entanto, algo como a -> b -> cnão se encaixa: This Type -> That Type -> Yet Another Typeé (geralmente) diferente; exceto o caso de borda quando c = a, que produz o padrão no qual você está interessado.

Sereja Bogolubov
fonte