私はHaskellライブラリ内のApplicative
クラスを見て、Alternative
を見つけました。ハスケル - Control.Applicativeとは何か?
このクラスは何に適していますか? Googleの検索では、特に洞察力のあるものは明らかにされませんでした。それはApplicativeパッケージと同じようにバンドルされているようです。
誰かがこのクラスを使用する可能性のあるシナリオを投稿してください。
私はHaskellライブラリ内のApplicative
クラスを見て、Alternative
を見つけました。ハスケル - Control.Applicativeとは何か?
このクラスは何に適していますか? Googleの検索では、特に洞察力のあるものは明らかにされませんでした。それはApplicativeパッケージと同じようにバンドルされているようです。
誰かがこのクラスを使用する可能性のあるシナリオを投稿してください。
これは一般にパーサーコンビネータで使用されます。たとえば、space
が単一の空白文字に一致するパーサーコンビネータである場合、many space
は連続する空白に一致するものになります。
でも、それはControl.Applicative
で少し外れていることに同意できます。
時々<|>
オペレータは非常に便利です:
foldl1 (<|>) [Nothing, Just 5, Just 3]
-- Just 5
ああ、面白いです!その文脈では、<|>は短絡のようです。演算子は多くの命令型言語で記述することができます。 –
これは 'mconcat'を使って[最初のモノイド](http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Monoid)で行うことができます。 html#t:最初)。これは[他の 'Maybe'モノイド](http://byorgey.wordpress.com/2011/04/18/monoids-for-maybe/)にうまく一般化されます。 – hammar
ああ、いいえ、分かりやすいデフォルト( 'foldl(<|>)Nothing')があるところで、' foldl1'がどこかで使われました。あなたの答えがクラッシュしたとき、あなたは何をしますか? :D – Rotsor
のみ*若干*場違い - それは両方とも、 'MonadPlus'と' ArrowPlus'と同じパターンで、Applicative's '上のモノイドですそれらのモジュールは、それらが基づいているクラスとモジュールを共有します。一貫性のために、 "ApplicativePlus"と呼ばれていたはずですが、それは醜い名前です。 –
これは大いに説明します。 'ApplicativePlus'を' Alternative'に命名するのは、後者がその範囲を限定する意味を持っているので、あまり良いことではありません。 –
@C。 A. McCann、私はそれを受け入れることができるようにあなたのコメントを答えに変換したいと思います:) –