一般化だと考えることができる。全てのMonadはArrowに変換することができるが、ArrowはMonadに変換できない場合がある。Arrow型を導入する目的はMonadを使う目的と同じであり、ライブラリ向けに標準的な型を用意することである。Arrow型はMonadより広範囲の概念をサポートする。Arrow型では、部分的に静的な計算(出力の一部が入力に依存しない計算)や、複数の引数を取る計算を表すことができる。Monadで上手くいくならMonadだけを使えばよいのだが、Monadが使えそうだが使えない対象に対しては、Arrowを使うべきかもしれない。procとarrowの根[編集]まずArrowを使った記法に馴れることから始めよう。ここでは、簡単のため、最もシンプルな関数を表すArrowと、小さなサンプルプログラムを書くことにする。それではテキストエディタを立ち上げてHaskellファイルを書いてみよう。ファイル名は、toyArrows.hsとでもしておく。(a+1)これがあなたの定義したはじめてのArrowだ。1番目の例は、恒等関数をArrowで表現したものであり、2番目の例は、もう少し意味のあるArrowで、入力に1を加えて出力する計算を表現するArrowである。オプションをつけてGHCiで読み込んで、何が起こるか見てみよう。100101ちゃんと動きました。今回出てきた記号は3つある。returnAさて、1を足すことができるようになったので、これから2倍難しいことをやってみよう。2を足すArrowを定義する。(a+1)簡単な方法は、上の例のように(a+1)をplusOneArrowに入力することである。plusOneの定義とplusTwoの定義がにていることに注目して欲しい。Arrowに違いない。記法[編集]さて、上のplusTwoの定義を見て読者はがっかりしたのではないか。plusOneを2回実行する定義になっていないのかと。ここでは、do記法を導入して、そのような定義を行ってみる。bGHCiで実行する。57この記法で、さらに長いArrowの列を定義することができる。dosこのページ「Haskell/Arrows」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。ご意見などがありましたら、お気軽にノートへどうぞ。表示-継承ライセンスのもとで利用できます。追加の条件が適用される場合があります。詳細については利用規約を参照してください。Cookieに関する声明モバイルビュ。