他人のHaskell日記 RSSフィード

Haskell初心者が、リハビリがてらに「ふつける」と「入門Haskell」片手に、試行錯誤するサイト。

2009-01-01

Arrowが分からない。  Arrowが分からない。 - 他人のHaskell日記 を含むブックマーク

If your application works fine with monads, you might as well stick with them.But if you're using a structure that's very like a monad,but isn't one,maybe it's an arrow.


(Monadを使ってアプリケーションがちゃんと動いているのなら、それを使い続けた方がよい。しかし、もし極めてモナドに似ていて、Monadでないようなものに出会ったとしたら、それは恐らくArrowだ。)

http://www.haskell.org/arrows/

<モナデッィクなパーサーの最適化をしていたらモナドのインターフェイスと互換性が無くなってしまった例をあげ、それは特別な例ではないと言う>


While arrows are a little less convininet to use than monads.they have significantly wider applicability.They can therefore be used to bring the benefits of monad like programming to a much wider class of application.


(Arrowの便利さは少しMonadに劣るが、使用可能範囲は広い。だからモナド的プログラミングの利点を、より広い種類のアプリケーションに持ち込める)

http://www.cs.chalmers.se/~rjmh/Papers/arrows.pdf

必要になるまでは、使わなくてもいいってことかな。

しかし気になる

なぜモナド なぜモナド - 他人のHaskell日記 を含むブックマーク

ここまで、コンビネータライブラリの基礎としてモナドが使うことができることを紹介した。

しかしながら、なぜ、モナドを使うべきなんだろうか?なぜモナドは今日のHaskellのプログラムに偏在するのだろうか?

ひとつの理由はもちろん、モナドを使うことがコードを劇的に単純化することだ。明示的な失敗のためのテストや明示的な入力の受け渡しをあちらこちらに書いたりするのは、symbol,>>=,returnを使うよりとても骨が折れるのは明らかだ。しかしながらこれは、コードをカプセル化するような、あらゆるコンビネータライブラリを使う利点であり、特にモナドを使うことは議論の範疇にない。モナドを使う他の理由は、コンビネータライブラリに設計の指針を与えることだ。しばしば適切なモナドを定義することから始めることは、よいスタートになる。例えば、パーサのライブラリに二つのパーサを連続で呼び出せるようなコンビネータを含める事は明白だ。しかしながら、コンビネータ二つのパーサの結果を扱うには様々なやりかたがある。あるパーサライブラリでは結果を一緒にペアにされるかもしれない。他のパーサでは、コンビネータが追加の引数として関数を取り、それを使って結果を結合するかもしれない。モナディックオペレータ>>=はより一般的な方法であり、これがあれば両方できるが、逆はそうではない。設計者は、パーサライブラリの基礎をモナドに置くことによって、ユーザにアドホックな他の選択肢よりも、より柔軟性を与えることができる。実際に、経験上モナドのインターフェイスがライブラリの利用者に凄い力を与えることを知っている。

他方、モナドのインターフェイスはコンビネータライブラリの実装に柔軟性を与える。非常に多くの使い方があるからだ。

我々は既に3つのモナドの例を見てきた。実際にはモナドトランスフォーマーを使えば、システマティックに無限の種類のモナドを構成できる。モナド設計のシステマティックなアプローチは実装者がコンビネータライブラリを基礎とする適切な方を探しやすくする。(以下略)

その他モナドに共通な関数が大量に使えることだとか云々。

http://www.cs.chalmers.se/~rjmh/Papers/arrows.pdf

圏論と抽象化  圏論と抽象化 - 他人のHaskell日記 を含むブックマーク

少ししか読んでないけれど、次の一節が印象に残った。

少し脱線して圏論の議題について語ろう。モナドの概念は圏論学者によって開発された。それは関数型言語への応用がついに発見されるより、遥か昔の事だった。圏論のような抽象的なものが、プログラミングのような具体的なものにとって有用だと判明するなんて不思議に思えるかもしれない。結局のところ、圏論は、その意味では抽象的すぎて不満足なものだ。それは「全ては定義である、定理は無い」という。もし十分な時間の観察をすれば、ほとんど全てが圏だと判明する。何かが圏である、ということは実際には何も言っていないに等しい。これは圏論のほとんどの概念についても真である。非常に多くの可能なインスタンス化があり、何かがモナドである、というのは殆ど何もいっていない。この極度の一般化は、初学者が圏論への入門に躓く理由となっている。しかし、それは驚くべきことではない。圏論というのは結局の所、万物の理論、つまり大量の異なった数学的な構造のフレームワークとなるべく開発されたのである。しかしながら何故、ある抽象的な理論が、プログラミングの役に立つなんて事があるのだろうか?

答えは単純だ。コンピュータ科学者として我々は抽象化を評価するのだ!。ソフトウェアのコンポーネントを設計するとき、実装は出来るだけ隠れていて欲しいと思うものだ。特定の実装を他の実装(同じ「概念」の他の多くの「インスタンス」)にいつでも起き換えられるようにしたいものだ。多くのプログラムのライブラリに一般的なインターフェイスを設計するとき、設計者が選択したインターフェイスを使って、幅広く多種類の実装がなされるようにするのは重要なことだ。それが我々が高く評価するモナドという概念の一般性であり、又、圏論が抽象的であるが故にその概念がプログラミングに有効な理由である。

ゆえに、以下に示すモナドの一般化が圏論と深い関係を持っていることは驚くようなことではない。しかしながら、その目的は実用的なものなのだと強調したい。「圏論を実装するため」の議論ではない。コンビネータライブラリを構造化するより一般的な手段を探すのが目的だ。それは我々にとって単純に幸運な事なのだ。数学者がほとんどの仕事をわれわれのために既にやってくれたのだから。

http://www.cs.chalmers.se/~rjmh/Papers/arrows.pdf

The Craft of Functional Programming 1章  The Craft of Functional Programming 1章 - 他人のHaskell日記 を含むブックマーク

関数型言語とOO言語の違いは、問題のモデル化するために提供するツールの差だよ。この差がモデル化の考え方を産み出しているよ。

  • 関数型プログラマは値の関係に注目するよ
  • OOプログラマはオブジェクトそのものに注目するよ。

型を与えることは、その使われかたについて多くの情報を提供するよ。

  • テストと証明
    • テストは、入力の一部のテストデータに対してしか動作を保障しないよ。
    • 証明なら、全ての入力に対しての動作を保障できるよ。
    • 高い信頼性が必要な分野では証明の出番。
    • しかしテストに意味がないわけではなく、テストと証明は相補的だよ。
  • ある関数とある関数の振舞いが等しいという「証明」は、transformに使えるよ。
    • これは言語の実装者にとって重要だけど、普通のソフトの開発でも重要だよ。


The Craft of Functional Programming 4章  The Craft of Functional Programming 4章 - 他人のHaskell日記 を含むブックマーク

設計
詳細なHaskellのコードを書く前のステージ
何をしようとしているか理解しているだろうか?
  • 単純な問題ですら、プログラムする前に考えるべきことがある。(仕様には漏れがある)
  • プログラムがどう振る舞うべきか、正しい答はない。プログラムを書くように要求した人と、プログラムを書く人自身が決める。(正しい仕様などは無い)
  • 問題を理解しているかを判断するために、いくつかの例を使って考えるとよい
  • このような問題は、実際にプログラムをはじめてからも何どもでてくる。
この時点で型について言えることがあるだろうか?

関数をどのように定義するかを考える前に型の事を考えよう。そのうち定義を書くときに型が正しさの手掛りとなる。

私が既に知っていることはなにか?その情報が使えないか?

問題を解決するのに使えるリソースについて知っておく必要がある。既に過去に書いた便利な定義や、言語がPreludeやライブラリで提供するものなど。

使えそうなfがある時

  • 新しい定義をfをモデルにして書く
  • 新しい定義をfを使って書く

という二つの方法がある。

問題を小さく分割できないか?

「もし、ある望んだ関数が存在したとしたら、それを使って問題を解決できるだろうか?」と考える。

「望んだ関数」が存在するかのようにしてトップレベルの関数を書き、「望んだ関数」を後に定義する。(トップダウン)

再帰

  • bottom-up表現は、基底ケースから次々と新しい値を作っていくのだと言っている。
  • top-down視点は評価されるゴールからはじめて、等式の単純化が基底ケースに辿りつくまでをみていく。

未定義ならerrorメッセージを書いておこう


fun (n-1)が既に存在したとしたら、fun n はそれを使ってどうかける?」とかんがえよう。

プログラムテスト

black box
仕様を知らずにテストをする
white box
仕様を知った上でテストをする
black box testing

入力を、関数が同じように振る舞うであろうグループ毎に分ける。

境界のような特別な例には特に注意を払う必要がある。典型的にはゼロとか。

テストはそれ自身では関数が正しいことを保障しない。

White box testing
  • 関数定義の全てのケースについてテストを行う。境界についてもそうである。
  • 再帰を使っていれば、0の場合、1の場合、一般の場合でテストを行う。

eyanoyejeyanoyej2018/02/20 14:51http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

azipuhakzdazipuhakzd2018/02/20 15:04http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

uduferiwetuduferiwet2018/02/20 15:08http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

vevegekiwebezvevegekiwebez2018/02/20 15:09http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

evawawoevawawo2018/02/20 15:18http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

rihakulekrihakulek2018/02/20 15:21http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

eqokzoaxeqokzoax2018/02/20 15:24http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

agyohumazopagyohumazop2018/02/20 15:29http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

uberecyimcfeauberecyimcfea2018/02/20 15:36http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ejegiwaceoltejegiwaceolt2018/02/20 16:58http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

oqarizehoqioqarizehoqi2018/02/20 17:13http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

GuestspuckGuestspuck2018/03/06 21:42guest test post
<a href=" http://temresults2018.com/ ">bbcode</a>
<a href="http://temresults2018.com/">html</a>
http://temresults2018.com/ simple

ptaletmyguptaletmygu2018/07/31 13:37<a href="http://bullsac.com">levitra diabetes</a> where to buy levitra cheap http://bullsac.com

utaletztoputaletztop2018/08/04 06:54<a href="http://baymontelreno.com">order cialis now</a> cialis 20mg online http://baymontelreno.com

otaletfekuotaletfeku2018/08/05 15:13<a href="http://onevoicemethod.com">cheap viagra pills</a> order viagra air travel http://onevoicemethod.com

ttaletnrgnttaletnrgn2018/08/07 08:44<a href="http://rabbitinahat.com">best place to buy cialis online</a> order cialis daily http://rabbitinahat.com

jtaletigyqjtaletigyq2018/08/07 22:13<a href="http://mphasset.com">buy viagra 100mg</a> women viagra http://mphasset.com

btaletrurpbtaletrurp2018/08/18 06:50<a href="http://istanbulexpressonline.com">online prescription for viagra</a> coupons for viagra http://istanbulexpressonline.com

qtaletxpblqtaletxpbl2018/08/18 09:13<a href="http://mphasset.com">get viagra prescription</a> viagra videos http://mphasset.com

htaletcxcjhtaletcxcj2018/08/18 12:11<a href="http://mphasset.com">prescription for viagra</a> womens viagra pink pill http://mphasset.com

ktaletdowxktaletdowx2018/08/18 14:20<a href="http://bullsac.com">levitra 20 mg dosage</a> levitra use http://bullsac.com

jtaletljprjtaletljpr2018/08/18 16:38<a href="http://bullsac.com">levitra tablet</a> how long do the effects of levitra last http://bullsac.com

jtaletmyesjtaletmyes2018/08/18 18:27<a href="http://psychologytweets.com">cialis commercial actors</a> what do cialis pills do http://psychologytweets.com

etaleteovhetaleteovh2018/08/18 20:22<a href="http://baymontelreno.com">australian generic cialis</a> will insurance cover cialis for bph http://baymontelreno.com

staletcvjmstaletcvjm2018/08/18 22:02<a href="http://psychologytweets.com">cialis duration of effect</a> price viagra vs cialis http://psychologytweets.com

staletfmvhstaletfmvh2018/08/18 23:37<a href="http://missreplicawatches.com">discount cialis 20mg</a> cialis and peyronies disease http://missreplicawatches.com

ataletfvwzataletfvwz2018/08/19 01:14<a href="http://psychologytweets.com">generic cialis super active reviews</a> is cialis cheaper than viagra http://psychologytweets.com

ataletkiwuataletkiwu2018/08/19 02:49<a href="http://psychologytweets.com">cialis strips</a> cialis expiration http://psychologytweets.com

otaletarenotaletaren2018/08/19 05:54<a href="http://baymontelreno.com">cialis results</a> cialis isnt working http://baymontelreno.com

btaletihsnbtaletihsn2018/08/19 17:08<a href="http://bakerssign.com">price of levitra 20 mg</a> levitra uk http://bakerssign.com

rtaletzanurtaletzanu2018/08/19 18:34<a href="http://gigawatt6.com">canadian drugs cialis</a> canada cialis online pharmacy http://gigawatt6.com

vtaletwczcvtaletwczc2018/08/19 21:33<a href="http://missreplicawatches.com">viagra vs cialis forum</a> tadalafil vs cialis http://missreplicawatches.com

ltaletrnhiltaletrnhi2018/08/20 00:29<a href="http://psychologytweets.com">cialis online catalog</a> free sample of viagra or cialis http://psychologytweets.com

htaletpxhfhtaletpxhf2018/08/20 01:54<a href="http://psychologytweets.com">cheapest cialis with prescription</a> cvs cialis http://psychologytweets.com

ztaletgrzqztaletgrzq2018/08/20 10:17<a href="http://psychologytweets.com">when to take cialis 5mg</a> 40 mg cialis dosage http://psychologytweets.com