Tipos y Orden Superior

Explicitar el tipo de una función de orden superior no es difícil: se hace igual que siempre. Por ejemplo, recordemos nuestra función saludar:

saludar titulador nombre = "Hola " ++ titulador nombre

Ésta toma una función de un parámetro y un nombre (un string), y devuelve un saludo (un string). Entonces, su tipo debería verse de la siguiente forma:

saludar :: (?? -> ??) -> String -> String

Ahora bien, ¿qué va en esos ???? Simple: la función titulador toma por parámetro un String, y devuelve otro String. Entonces, el tipo de saludar es:

saludar :: (String -> String) -> String -> String

Veamos si queda claro: explicitá el tipo de la siguiente función:

saludoDoble titulador uno otro = "Hola " ++ titulador uno ++ " y " ++ titulador otro  
¡Dame una pista!

Un ejemplo de uso de saludoDoble sería:

 saludoDoble sr "Jose" "Juan"
"Hola Sr. Jose y Sr. Juan"

Tenés que iniciar sesión antes de empezar a enviar tus soluciones