Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas [Pregunta 3]

Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas [Pregunta 3]

de Tiziana Romani Linich -
Número de respuestas: 4

Dada la siguiente definición: 

mon a b = a >>= \x -> return b >>= \y -> return (x : y) 

¿Cuál de las siguientes afirmaciones es correcta?


Seleccione una:
a. mon ’a’ [’b’] retorna [’a’,’b’]
b. El tipo de mon es mon :: Monad m => m a -> m [a] -> m [a] 
c. La función no compila correctamente
d. El tipo de mon es mon :: Monad m => m a -> [a] -> m [a]



No termino de comprender cómo está relacionado el tipo de la función con sus parámetros.

Comprendo que x sea a e y deba ser return b porque así lo requiere el operador (:)

Pero dentro del tipo de mon, m a sería referido a a y [a] sería b o cómo, no logro comprender qué son m a y [a].


Gracias

En respuesta a Tiziana Romani Linich

Re: Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas [Pregunta 3]

de Marcos Viera - InCo -

Tenés que ver el tipo de (>>=), que es:

(>>=) :: m a -> (a -> m b) -> m b


Entonces cuando tenés:

mon a b = a >>= \x -> return b >>= \y -> return (x : y)

lo primero que tenés es al parámetro 'a' como primer operando de (>>=), por lo que la variable 'a' tiene tipo 'm a' (perdón por usar el mismo nombre para la variable y el tipo).

Todo el resto es una función de a -> m b

\x -> return b >>= \y -> return (x : y)
Entonces 'x' tiene tipo a. Así sigo luego haciendo el mismo razonamiento.

Dos cosas más a tener en cuenta aquí, son el tipo de return y el de (:):

return :: a -> m a

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


En respuesta a Marcos Viera - InCo

Re: Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas [Pregunta 3]

de Tiziana Romani Linich -

Entonces m a es una computación monádica, List monad en este caso;

[a] serían los resultados de las computaciones monádicas concatenadas de a y b, en este caso x e y.

y m [a] el resultado de la computación monádica sobre tales argumentos anteriores?


En respuesta a Tiziana Romani Linich

Re: Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas [Pregunta 3]

de Marcos Viera - InCo -

De ningún lado se infiere que sea una List monad, para que esto sea así m tendría que ser [].

En este caso la computación monádica retorna algo de tipo lista, que no es lo mismo.