prueba 2019 ej 1 a i

prueba 2019 ej 1 a i

de Julio Carlos Vera Serafino -
Número de respuestas: 5

A ver si alguno puede hacerme algún comentario. Agradezco desde ya.

1) en la definición de txt, de ask se obtiene el largo máximo. No veo por qué ask brinda eso. Tampoco encuentro la definición de ask. Si consulto sobre MonadReader, obtengo

Prelude Control.Monad.Reader> :i MonadReader

class Monad m => MonadReader r (m :: * -> *) | m -> r where

  ask :: m r

  local :: (r -> r) -> m a -> m a

  reader :: (r -> a) -> m a

Parece que simplemente da el tipo de ask, no una definición

2) Esta es menos relevante. Por qué se suma 1 a la suma de los largos? A mí me parece, en principio, que la suma de los largos es el nuevo estado, sin sumar 1.


En respuesta a Julio Carlos Vera Serafino

Re: prueba 2019 ej 1 a i

de Bruno Alberto Szilagyi Ibarra -

Acabo de hacer ésta parte, te contesto lo que entendí yo y ya de paso nos corrigen a los dos cualquier cosa.

1) En la letra de la parte (i) se dice que la mónada "m" está clasificada como una MonadReader Int m.
    Según entiendo, eso significa que vos aplicando la computación monadica "m" vas a poder tener un entero que está en el ambiente, eso es usando el método get.
Por eso lo primero que se hace es dentro de un "do", largoMax <- get.

2) Entiendo que para el texto a añadir en el mismo renglón suma 1 porque tenes que considerar el caracter del espacio que pones para separar lo que tenías de lo nuevo a agregar.

 

Saludos!!

En respuesta a Bruno Alberto Szilagyi Ibarra

Re: prueba 2019 ej 1 a i

de Julio Carlos Vera Serafino -

1) En la letra de la parte (i) se dice que la mónada "m" está clasificada como una MonadReader Int m.
    Según entiendo, eso significa que vos aplicando la computación monadica "m" vas a poder tener un entero que está en el ambiente, eso es usando el método get.
Por eso lo primero que se hace es dentro de un "do", largoMax <- get.


Lo de la parte 1, todavía no lo veo. Lo que yo pienso es que en algún lado debe haber una instancia (o tal vez definicón por defecto) del método ask de la clase MonadReader. Y esa instancia o definición debe establecer que la acción ask tiene como resultado el largo de la palabra. Pero la definición por defecto no aparece si hago :i , y tampoco hicimos una definición específica de ask nosotros. 

En respuesta a Julio Carlos Vera Serafino

Re: prueba 2019 ej 1 a i

de Bruno Alberto Szilagyi Ibarra -

Lo que pasa es que "MonadReader Int m" está añadiendo una reestricción sobre m, la está clasificando.
La mónada m que estás usando tiene por lo tanto definidos los métodos ask y local (Por estar clasificada de ésta forma, el tema donde se repasa ésto es el de type Classes si no me equivoco).
La instancia particular va a tener que ser definida si, pero en la implementación de éste método no te interesa como se implementa ya que estás usando el código para cualquier "m" MonadReader.
Lo que si sabes es ese tipo Int que tiene monadReader y además la semántica de ese int que lo dice en la letra.

Espero que haya ayudado!