Ejercicios de repaso - Monadas

Ejercicios de repaso - Monadas

de Nahir Marisol Toledo Olivera -
Número de respuestas: 4

Hola, como estan?

Dado el siguiente ejercicio:

main = do ts <- putStr "Hola"
          putStr "Chau"
          putStr (show ts)
Se pregunta que hace el programa.

La salida del mismo es  HolaChau()

No nos queda claro porque () al final. De donde se desprende este?

Agradezco de ante mano.

Saludos.



En respuesta a Nahir Marisol Toledo Olivera

Re: Ejercicios de repaso - Monadas

de Ana Laura Rodriguez Colesnik -

Hola, yo llegué al resultado. Comparto mi desarrollo a ver si está bien.

Entiendo que la primer linea imprime Hola, y asigna el nombre ts al resultado de evaluar la acción IO (). Esto lo saqué por la definición de <- en el do notation, y porque putStr "Hola" :: IO().  Por otra parte, el resultado de evaluar IO() es () (el tipo unit), pero hasta acá no lo vemos.

La segunda linea imprime Chau.

Entonces en la tercera linea tenemos que show ts es show (()) = "()". Así es como putStr "()" aporta el juego de paréntesis esos después del HolaChau.




En respuesta a Ana Laura Rodriguez Colesnik

Re: Ejercicios de repaso - Monadas

de Juan Pablo García Garland -
Esta es la idea, pero ojo con esta frase: "el resultado de evaluar IO() es () (el tipo unit)" que es muy confusa.

Se evalúan expresiones, no tipos. Al correr este programa evaluamos `putStr "Hola"` (que tiene tipo `IO ()`, esto es, una computación que hace E/S y produce un valor de tipo `()`). El resultado producido es `()` (un *valor*, de tipo `()` -la notación está sobrecargada-).
En respuesta a Nahir Marisol Toledo Olivera

Re: Ejercicios de repaso - Monadas

de Juan Pablo García Garland -

La expresión putStrLn "Hola" tiene tipo IO (). Ligamos el resultado de la computación a la variable ts, ts vale entonces (). Luego show ts vale "()", que es lo que imprimimos en la última linea. ¿Se entiende?