Powiel możliwe:
Why don't Haskell list comprehensions cause an error when pattern match fails?Niewyczerpujące wzór w Haskell listowego
Dziś widziałem następujący kod:
Prelude> [a | Just a <- [Just 10, Nothing, Just 20]]
[10, 20]
To działa. Ale myślałem, że powyższa lista rozumienie jest tylko cukier syntaktyczny dla ...
[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x)
... dla których Haskell, gdy napotyka na Nothing
, by emitować błąd *** Exception: Non-exhaustive patterns in lambda
.
Moje pytanie brzmi: co oznacza translacja [a | Just a <- [Just 10, Nothing, Just 20]]
(pod względem monadycznego kodu), która powoduje, że ignoruje ona kod Nothing
?
@ephemient: Dzięki! Opublikowany przeze mnie wpis odpowiada na moje pytanie. I znalazłem [inny] (http://stackoverflow.com/questions/7007222/haskell-list-comprehension-to-combinatory). Powodem, dla którego nie znalazłem tych wpisów, zanim opublikowałem moje pytanie, jest to, że nie zawierają one słowa "wyczerpujący", który jest terminem Haskella na problem. (Jestem nowicjuszem w StackOverflow i nie jestem pewien, co powinienem zrobić. Czy powinienem usunąć to pytanie? Nadal byłoby przydatne dla osób, które wpisały "[nie] wyczerpujące".) –
nie trzeba usuwać - ostatecznie zostanie zamknięte jako duplikat, co oznacza, że będzie duży link do góry, przesyłając ludzi tutaj z powrotem do następnej z odpowiedzią. I, jak sam zauważyłeś, bardziej przydatne jest trzymanie się, niż zabijanie :) – ephemient