arrowに関するpropellaのブックマーク (8)

  • mad日記 - Arrowパズル解答 (とArrowLoop解説)

    まず最初にArrowLoopについて説明します。数学的な話は一切しません(できません)。 ArrowLoopの仕組み ArrowLoopというクラスにはloopという関数が一つだけ属しています。このloopはArrowから新しいArrowを作り出してくれる関数です。 まずloopに入れるArrowはこんな形をしています。 入力が2つあり、出力も2つあります。ただし、Arrowは入力と出力がどちらも1つずつでなければならないので実際はタプルとして入出力します。標準ライブラリで定義されているArrowLoopクラスのインスタンスには普通の関数と、モナドをArrow化したKleisliというArrowがあります。 ここでは例として次のArrowを考えます。 swap_mul = \(x, y) -> (2 * y, 3* x) 実行例 > swap_mul (3, 4) (8,9)簡単な関数です

    mad日記 - Arrowパズル解答 (とArrowLoop解説)
    propella
    propella 2007/08/19
    ArrowLoop 図入りの説明
  • Arrowの心 - 2007-08-16 - mad日記

    昨日の続きです。記法がよいとかMonadみたいに副作用が扱えるとか言ったメリットをはるかに越えたArrowの素晴らしさについて紹介します。 reverse.reverse == id か? 自分が最初にArrowってすごいと気づいた問題がこれです。大学で同級生と話している時に気づきました。大して役に立つ例では無いですが、Arrowの新しい側面が見えてくる例です。 標準入力に対してreverse,reverse,headを順に実行して結果を出力するコードは以下のようになります。後の比較の為に敢えてArrowで書いています。 import Control.Arrow main :: IO () main = getContents >>= print. (reverse >>> reverse >>> head) リストを2回ひっくり返したら元に戻るだけなので、そのheadをとるという計算は一

    Arrowの心 - 2007-08-16 - mad日記
    propella
    propella 2007/08/18
    すばらしい
  • Arrowでクイックソート - mad日記

    久しぶりに書きます。この1ヶ月半ほどは、大学の試験があったり、塾の夏期講習をやったり、CPU実験が始まった(勝手に始めた)りしたのでブログの事をすっかり忘れてました。 んで、現在Haskellでコンパイラを製作なんかをしています。その為にHaskellの勉強を始めたのですが、Arrowというモジュールに出会ってどっぷりはまってしまいました。 Arrowは書きやすいのか? Haskellと言えばやっぱりクイックソートだろうということでArrowで書いてみたんですが、こんな事になりました。あえて全部Arrowで書いているので複雑ですけれども。 qsort :: Ord a => [a] -> [a] qsort = (null >>> \x -> if x then Left else Right) &&& id >>> app >>> id ||| (head &&& ((head >>>

    Arrowでクイックソート - mad日記
    propella
    propella 2007/08/16
    ArrowLoop の貴重なサンプル
  • らくがきえんじん

    リンク切れ記事の多くは http://d.hatena.ne.jp/keigoi/ に移動しています. たとえば http://d.hatena.ne.jp/syd_syd/20080302#p1 の記事は http://d.hatena.ne.jp/keigoi/20080302#p1 にあります.

  • Arrowのこと - Inemuri nezumi diary(2007-06-22)

    _ Arrowのこと Open Source Conference 2007 Hokkaido の資料作り終えた。セミナーのほうはかなり初心者向きな講演になると思う。けど… あろはさんみたいな人ばかり来たらどうしようと思ったので Arrow の復習もしておいた。 小さな部屋らしいから、「Arrowというものが世の中にはございまして、Kleisli 圏やら Premonoidal 圏がどうのこうの…」とか言っておけばよかろうと考えた。これでも甘いと言われたら Functional Reactive Programming とかですか(だんだん偉大なる Shelarcy さんに近づく例)。 Hello, world を Arrow で 2 種類書いておく。一つは Control.Arrow モジュールに基づくもの、もう一つは -f arrows しないと通りません*1。 import Cont

  • ArrowによるHaskellプログラミングの基礎。…パイプ感覚で順次/分岐/繰返し - よくわかりません

    Programming with Arrowsを読んで理解したつもりのメモ。誤りなど乞うご指摘。 (復習)Arrowってなに? と思って以前調べたメモが"3分で解るHaskellのArrowの基メモ - よくわかりません"。それにちょっと補足というか観点を変えてまず感覚の整理。 Monadに色んな種類があるように、Arrowも色んな種類がある。 Monad: IO、Maybe、… Arrow: 関数そのまんま(->)、Kleisli m、… ある種類のMonadに色んな型の色んな値を入れられるように、ある種類のArrowに色んな型の色んな関数を入れられる。 Monad: Maybeの例→ 「Maybe Int」 にreturn 0もreturn 777もOK。「Maybe Char」 にreturn 'a'もreturn ' 'もOK。 Arrow: (->)の例→ 「Int -> In

    ArrowによるHaskellプログラミングの基礎。…パイプ感覚で順次/分岐/繰返し - よくわかりません
  • http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20070701

  • 3分で解るHaskellのArrowの基本メモ - よくわかりません

    語でArrowの説明があまり見付からなかったので、Haskell/Understanding arrows - Wikibooks, open books for an open worldを読んで理解したつもりのメモ。オリジナルの図を見ながらだと分かりやすいかも。誤り・間違いなど、乞うご指摘。 b->cな関数をArrowなるからくり箱に入れると、 (Arrow a) => a b c こんな型になる。型パラメタが、引数のbと返値のcのふたつ。 Monadは、値をからくり箱に入れたもの。からくり箱は基的に(ヘンな)値。 Arrowは、関数をからくり箱に入れたもの。からくり箱は基的に(ヘンな)関数。 arr :: (b -> c) -> a b c Monadでは、値をからくり箱に入れる関数returnがある。 Arrowでは、関数をからくり箱に入れる関数arrがある。 (>>>)

    3分で解るHaskellのArrowの基本メモ - よくわかりません
  • 1