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.
haskell
functional-programming
Dreana
fonte
fonte
Respostas:
Não há diferença. Desde
a
,b
ec
começ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,
a
por exemplo,b
no seu primeiro fragmento de código, obteríamosb -> 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.fonte
Não. Pense
a -> b -> a
comoThis Type -> Another Type -> This Type
. Então, ambos se encaixam em determinado padrão. No entanto, algo comoa -> b -> c
não se encaixa:This Type -> That Type -> Yet Another Type
é (geralmente) diferente; exceto o caso de borda quandoc = a
, que produz o padrão no qual você está interessado.fonte