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.
haskell
functional-programming
Dreana
fuente
fuente
Respuestas:
No hay diferencia. Desde
a
,b
yc
comenzar 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,
a
por ejemplo,b
en su primer fragmento de código, obtendríamosb -> 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.fuente
No Piensa en
a -> b -> a
comoThis Type -> Another Type -> This Type
. Entonces ambos encajan en el patrón dado. Sin embargo, algo comoa -> b -> c
no encaja:This Type -> That Type -> Yet Another Type
es (generalmente) diferente; excepto el caso límite cuandoc = a
, que produce el patrón que le interesa.fuente