UTNianos

Versión completa: [Funcional] Definir el tipo de una función
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenasss... consultirijilla??

Veo que en casi todos los finales de pdep está el punto en el que te preguntan de qué tipo es una función, y por mas que veo los resueltos no entiendo cómo se obtienen... seguro es una pavada pero no se, creo que nunca me lo enseñó doña Fleischman.

Alguien que me pueda explicar?

Por ejemplo, si tengo:
cumple f [_] = True
cumple f (x:y:xs) = f x y && cumple f (y:xs)

Como obtendria el tipo de esa funcion?
La forma facil:

:t cumple


La forma dificil, y que vas a tener que hacer en el parcial:

cumple :: (funcion f) -> (lista de algo) -> Bool

Ahora hallemos lo que falta.

Para f:
Viendo la segunda linea, vemos que f recibe x e y, y luego es usado con un &&, asi que tiene que devolver un bool.
Entonces f :: (x) -> (y) -> Bool
x e y son elementos de una lista (los usa varias veces como cabeza en la segunda linea), pero no dice que mierda son, asi que f :: a -> a -> Bool

Y la lista es de "a" tambien

Entonces te queda


cumple :: (a -> a -> Bool) -> [a] -> Bool

URLs de referencia