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.