¿Hay alguna diferencia entre las firmas de tipo a -> b -> a y c -> a -> c?

16

Esta pregunta es una pregunta teórica sobre las funciones de Haskell que pueden tomar argumentos de cualquier tipo. ¿Hay alguna diferencia entre la forma en que funciona con las firmas de tipo de

a -> b -> a 

y

c -> a -> c 

son instanciados? Cualquier ayuda es apreciada.

Dreana
fuente
66
No, simplemente cambió el nombre de las variables de tipo . Mientras no cambie el nombre de una variable a otra variable (de modo que haya un choque de nombres), no hay problema.
Willem Van Onsem
Depende de si / cómo se vinculan las variables de tipo en otro lugar.
Bergi

Respuestas:

17

No hay diferencia. Desde a, by ccomenzar con minúsculas , estas son variables . Puede cambiar el nombre de las variables, y esto permanece igual, siempre y cuando dos (o más) variables no " choquen ".

Tales conflictos pueden ocurrir si cambia el nombre de una variable de modo que tenga el mismo nombre que otra variable, o cuando cambia el nombre de dos (o más) variables al mismo nombre nuevo. Si cambia el nombre de la variable, apor ejemplo, ben su primer fragmento de código, obtendríamos b -> b -> b, pero eso no es lo mismo, ya que luego exigimos que el primer y el segundo parámetro sean del mismo tipo. Mientras que en su firma de tipo, tenemos la libertad de elegir dos tipos que pueden ser iguales, pero que no es necesario.

Willem Van Onsem
fuente
16

No Piensa en a -> b -> acomo This Type -> Another Type -> This Type. Entonces ambos encajan en el patrón dado. Sin embargo, algo como a -> b -> cno encaja: This Type -> That Type -> Yet Another Typees (generalmente) diferente; excepto el caso límite cuando c = a, que produce el patrón que le interesa.

Sereja Bogolubov
fuente