Duplicar posibles:
Why don't Haskell list comprehensions cause an error when pattern match fails?patrón no exhaustiva en Haskell lista por comprensión
Hoy he visto el siguiente código:
Prelude> [a | Just a <- [Just 10, Nothing, Just 20]]
[10, 20]
Funciona. Pero pensé que la lista anterior es la comprensión de azúcar sintáctica para simplemente ...
[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x)
... para los que Haskell, cuando se enfrentan a la Nothing
, emitiría un error *** Exception: Non-exhaustive patterns in lambda
.
Así que mi pregunta es: ¿en qué se traduce [a | Just a <- [Just 10, Nothing, Just 20]]
(en términos de código monádico) que hace que ignore el Nothing
?
@ephemient: ¡Gracias! La publicación a la que vinculó responde mi pregunta. Y he encontrado [otro] (http://stackoverflow.com/questions/7007222/haskell-list-comprehension-to-combinatory). La razón por la que no encontré estas publicaciones antes de publicar mi pregunta es porque no contienen la palabra "exhaustiva", que es el término de Haskell para el problema. (Soy nuevo en StackOverflow y no estoy seguro de lo que se supone que debo hacer. ¿Debo eliminar esta pregunta? Todavía sería útil para las personas que escribirían "[no-] exhaustivo".) –
Usted no es necesario eliminar - eventualmente se cerrará como un duplicado, lo que significa que habrá un enlace grande arriba reenviando personas de aquí a la próxima con la respuesta. Y, como nota, es más útil mantenerse cerca que matar :) – ephemient