Practico 2 Ej 15

Practico 2 Ej 15

de Rodrigo Alain De La Vega Rodriguez -
Número de respuestas: 2

Buenas! Solo para verificar si la respuesta que doy a este ejercicio es correcta.

La función dobleAp f = (f True, f ’a’) entiendo que recibe una funcion y que luego esta funcion recibe un parametro y retornara algo (no se). Por lo tanto creo que el tipo es: dobleAp :: (a->a)

Luego entiendo que no anda porque la función es polimorfica y al pasarle a f True estamos como que obligando a que lo que no tiene un tipo definido ahora sea un Bool y eso no es valido, seria la misma idea para f 'a'.

Espero me puedan corregir si estoy mal.
Gracias!


En respuesta a Rodrigo Alain De La Vega Rodriguez

Re: Practico 2 Ej 15

de Marcos Viera - InCo -
Si, salvo algún pequeño error en los tipos, tu deducción es correcta.
Te agrego que de la aplicación (f True) uno podría deducir que:
dobleAp :: (Bool -> a) -> (a,a)
Pero de la aplicación (f 'a') deducimos:
dobleAp :: (Char -> a) -> (a,a)

y esos dos tipo no se pueden unificar en (b -> a) -> (a,a) porque es demasiado polimórfico. Fijate que si ese fuera el tipo de dobleAp, entonces la podría aplicar por ejemplo a:
dobleAp (+ 1)
lo cual no es correcto.