2012-07-30 20 views
5

可能性の重複:それは作品Haskellのリスト内包で非網羅的なパターン

Prelude> [a | Just a <- [Just 10, Nothing, Just 20]] 
[10, 20] 


Why don't Haskell list comprehensions cause an error when pattern match fails?

今日、私は以下のコードを見ました。しかし、私はHaskellは、Nothingに遭遇したとき、エラー*** Exception: Non-exhaustive patterns in lambdaを発することになるために...上記のリストの内包が

[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x) 

...のためだけ糖衣構文であると考えました。

私の質問は:[a | Just a <- [Just 10, Nothing, Just 20]]は(モナドコードの点で)Nothingを無視して変換するのは何ですか?

+0

@ephemient:ありがとう!リンクした投稿が私の質問に答えます。そして私は[another](http://stackoverflow.com/questions/7007222/haskell-list-comprehension-to-combinatory)を見つけました。質問を投稿する前に私がこれらの投稿を見つけなかったのは、問題のハスケル語である「網羅的」という言葉が含まれていないためです。 (私はStackOverflowを初めて使用していて、何をすべきか分かりませんが、この質問を削除する必要がありますか?「非「網羅的ではない」と入力している人にとっては便利です) –

+0

削除する必要はありません。最終的には重複して閉じられます。つまり、回答のある人がここから次の人に転送する大きなリンクがあります。そして、あなたが注意しているように、それを殺すよりも周りをつかむことがより有益です:) – ephemient

答えて

2

that other questionの中で最も良い答えは、実際には「コンパイラマジック」を参照していると思います。あなたは、パターンJust xにマッチしていて、試合は、リストの要素は、単にスキップされ失敗した場合Haskell 2010 Reportに係る行動は...

として指定されています。

私は実装が自由であると思っています(つまり、デッサージは必ずしも一意ではありません)。

関連する問題