タグ

ブックマーク / hiratara.hatenadiary.jp (3)

  • モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - Pixel Pedals of Tomakomai

    圏論の最大の武器はダイアグラムなので、モナドで悟りをひらきたいのならダイアグラムを使えばいいんじゃないでしょうか。 ダイアグラムの書き方 例えば、「 f :: a -> b 」とか「length :: [a] -> Int」は以下のように書きます。型を点で、関数を矢印で書きます。 ダイアグラムの利点は、fやlengthの中身を忘れて簡略化することができることです。人間の脳ができることには限りがあるので、注目する情報が少ない方が理解しやすくなるってスンポーです。 なお、 合成 g . f は図示する時に順が逆になるので気をつけて下さい。これは、合成関数の適用が g ( f x ) と書けることに由来してます。まずfを適用し、次にgを適用するということです。 return と >>= の図示 今回のダイアグラムの約束として、元となる型(Bool, Char, Int 等)は最下段に書きます。そ

    モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - Pixel Pedals of Tomakomai
    paella
    paella 2009/11/02
    図でも難しい雰囲気が・・・そんなに難しいものなのかしら?
  • Coro::AnyEventでフロントエンドをコールバックを使わずに書く - Pixel Pedals of Tomakomai

    Coro::AnyEventを使うと、継続渡しスタイルを使わずに非同期を書くことができます*1。 ということで、試しにやってみました。 最初にまとめ AnyEventの層を作り、その上にCoroの層を重ねて、フロントエンドからはCoroの層だけ使うとわかりやすいアプリができるんじゃないかなあと思います。 (0) AnyEventのAPIを作る まず、AnyEventでフロントエンドのための材料を作ります。頑張ってコールバックを使って非同期処理を書いて下さい。名前空間はAnyEvent::的な何かにするといいと思います。また、たぶんこの段階ではまだCoro::AnyEventは使わない方が無難です。ピュアAnyEventの方が使い回しが効きますし。 ここでは、AnyEvent::HTTPを題材にします。バックエンドとしてすでにAnyEvent::HTTPは使えるものとします。 (1) Cor

    Coro::AnyEventでフロントエンドをコールバックを使わずに書く - Pixel Pedals of Tomakomai
    paella
    paella 2009/10/01
    あとで読む
  • Coroを使って、コールバック形式を普通の形式に書き換えてみた - Pixel Pedals of Tomakomai

    非同期ブーム第二段です。 書き換え方 func_by_cb( $cb, @params ) みたいな形式があった時に、Coroのrouse_cbを使うと、通常の関数呼び出しの形式で呼び出せる関数に変換ができます。こんな感じで。 sub func_by_coro { func_by_cb( Coro::rouse_cb, @_ ); return Coro::rouse_wait; } 変換前の関数(func_by_cb)は、以下のように使います。 func_by_cb( sub { print @_, "\n"; }, 1, 2, 3); 対して、変換後の関数(func_by_coro)では、この処理を以下のように書けます。 print func_by_coro(1,2,3), "\n"; 使い勝手は一目瞭然ですね! コールバックがAnyEventで実現されている場合 コールバックがAny

    Coroを使って、コールバック形式を普通の形式に書き換えてみた - Pixel Pedals of Tomakomai
    paella
    paella 2009/09/24
    このコルーチンへの書き換えパターンをCにも適用したいなあ。
  • 1