Eventuali duplicati:
Why don't Haskell list comprehensions cause an error when pattern match fails?modello non esaustivo nella lista Haskell comprensione
Oggi ho visto il seguente codice:
Prelude> [a | Just a <- [Just 10, Nothing, Just 20]]
[10, 20]
Funziona. Ma ho pensato che l'elenco di cui sopra di comprensione è lo zucchero sintattico per ...
[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x)
... per i quali Haskell, quando incontra il Nothing
, emetterebbe un errore *** Exception: Non-exhaustive patterns in lambda
.
Quindi la mia domanda è: cosa si traduce in [a | Just a <- [Just 10, Nothing, Just 20]]
(in termini di codice monadico) che ignora lo Nothing
?
@ephemient: Grazie! Il post che hai collegato per rispondere alla mia domanda. E ho trovato [un altro] (http://stackoverflow.com/questions/7007222/haskell-list-comprehension-to-combinatory). Il motivo per cui non ho trovato questi post prima di pubblicare la mia domanda è perché non contengono la parola "esauriente", che è il termine di Haskell per il problema. (Sono nuovo di StackOverflow e non sono sicuro di cosa dovrei fare. Devo eliminare questa domanda? Sarebbe comunque utile per le persone che digiteranno "[non-] esauriente".) –
Tu non è necessario eliminarlo, ma alla fine verrà chiuso come duplicato, il che significa che ci sarà un grosso collegamento con le persone che inoltreranno le persone da qui a quello successivo con la risposta. E, come si nota, è più utile mantenere in giro che uccidere :) – ephemient