Estoy pasando por Write Yourself a Scheme in Haskell. Es un gran tutorial, pero me he encontrado en una pared con una de las parsing exercises:Monadic tipo confusión
parseNumber :: Parser LispVal
parseNumber = liftM (Number . read) $ many1 digit
reescritura parseNumber usando:
- Do-notación
- secuenciación explícita con el operador = >>
no he tenido problemas con la notación do-:
parseNumber :: Parser LispVal
parseNumber = do x <- many1 digit
let y = read x
return $ Number y
Para # 2 Yo he probado un montón de variaciones, tales como:
parseNumber :: Parser LispVal
parseNumber = (many1 digit) >>= (liftM (Number . read))
pero sigo corriendo a errores de tipo. Tengo dos preguntas.
- ¿Por qué me aparecen los errores de tipo? ¿Estoy entendiendo mal al operador de enlace monádico?
- ¿Por qué NO obtengo errores de tipo similar con mi solución de notación do?
Siento que me falta un concepto fundamental con respecto a los tipos?
maravillosa respuesta. Ahora tiene mucho más sentido. – dbyrne