[Prueba 2017][Ejercicio 4]

[Prueba 2017][Ejercicio 4]

de Hugo Sebastian Rodriguez Reyes -
Número de respuestas: 4

Estimados,

El ejercicio dice:

Dada la siguiente definición:

foo f a = map (f a)

¿Cuál de las siguientes afirmaciones no es correcta?

(a) El tipo es foo :: (a → b → c) → a → [b ] → [c ]

(b) foo (||) False ≡ id

(c) sum ◦ foo const 1 ≡ length

(d) foo ($) ≡ map

La respuesta correcta es la b, pero no entiendo por qué la b es incorrecta. Por ejemplo foo (||) False [True,True,False] = [True,True,False], o sea es id [True,True,False].

Tampoco entiendo porque la d es correcta.

Agradezco si alguien me puede explicar.

En respuesta a Hugo Sebastian Rodriguez Reyes

Re: [Prueba 2017][Ejercicio 4]

de Marcos Viera - InCo -

Con respecto a la b)

id "hola" == "hola"

foo (||) False "hola" == error: Couldn't match type ‘Char’ with ‘Bool’


Con respecto a la d)

foo ($) f == map (($) f) == map f 


En respuesta a Marcos Viera - InCo

Re: [Prueba 2017][Ejercicio 4]

de Hugo Sebastian Rodriguez Reyes -

Con respecto a la b)

Entiendo, cometí el error de asumir que el tipo de b es igual al tipo de a; pero en realidad no necesariamente es igual.

Con respecto a la d)

Cuando pones foo ($) f, viendo la definición de foo dada, ($) sería la f y la f sería la a?