サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
レイングッズ
oto-oto-oto.hatenablog.com
絵を描きながらStateモナドを考えてみたら意外とうまくいったので紹介します。 Stateモナドには「表の値」と「裏の値=状態」という2つの値(型)が登場します。 Stateモナドの定義です。(s -> (a,s))で、sが状態の型、aが表の値の型です。 newtype State s a = State { runState :: (s -> (a,s)) } The State monad 図の方ですが、矢印は関数です。原則として、1入力1出力の一本の矢印で表しますが、今回は戻り値が2値のタプルなので2出力として書きました。 丸四角で囲ってあるのは、関数をオブジェクト*1として扱うことを意図しています。 これに対して、丸四角で囲っていない矢印は関数適用を表すことにします。 一番外側の大カッコはStateモナドのデータ構築子を表します。これでラムダを囲むとStateモナドの値になります。
圏の射は、cod と dom が一致しているときに結合可能というのが公理にあるけれども、モナドの「結合」ではちょっとずれている。 タイトルの「変な結合」というのは、Haskell で言うと bind (>>=) のこと。どこが変かというと cod と dom がモナド(関手)一個分ずれているとき「結合」可能*1 というところ。どっちに一個分ずれているかは省略。 こういう見方をすると、モナド則 1. (return x) >>= f == f x 2. m >>= return == m 3. (m >>= f) >>= g == m >>= (\x -> f x >>= g)最初の規則は return が >>= に関して左単位元になっていることを要請しています。二番目の規則は return が >>= に関して右単位元になっていることを要請しています。そして、三番目の規則は >>= に関
基調講演 Larry。 Perl6は many languages と。パーサを拡張することができて云々とかいう話をしてたと思う。 ベースとなる言語の構文とか意味とかとの相性問題はどうなるんだろう絶対衝突おきてハマるよなー、それでも拡張を許すとなるとベースは構文も意味もシンプルな方が有利な気がする、それって Lisp じゃん、ベースが Perl6 ってできるのかなー、とか思った。Perl ならなんとかして実現してしまいそうな気がする。 あとRubyKaigi の時も感じたけど、英語弱すぎ。リスニングだけでも鍛えたい。 100年後 まつもとさん以外は、並列化とか速度とかGCとか、今よく言われている課題が解決してるはずハッピーという感じ。想像してたのは普通の人が声でコンピュータに指示とかそんな方向だったのでまつもとさんのに同意。 id:higeponさんだったと思うけど、車にたとえてたのは、私
再帰を無名のままやりたい。 … 無名の自分をどうやって呼ぶんだ? 名前を付けてやればいい。 無名で名前が付けられるのはというと、仮引数しかない。 何かの関数の実引数としてわたしてやればいいんじゃない? こんな感じ def nanika(f) f # あれ? end引数としてfが渡されてきたということは、fは定義済みでブラックボックス。 fの定義をしたいのに。 … fにブロックを渡せるようにしておけばいいんじゃない? で、fの定義でブロックを呼び出す。 つまり、fの定義(の一部)を実行時まで遅らせる、実行時に決定できるようにしておく。 def f(self, x) ... self(self, x-1) ... endこんな感じ。仮引数のselfは、自分自身(f)が入ってくる予定だよ〜という気持ち。 そしたら、nanikaの中では def nanika(f, x) f(f, x) endとし
ふつけるのMaybeモナドの例*1とUnixパイプが同じ形だなという発見。 lookup "database" config >>= lookup "encoding" -- Maybeモナドの例 grep "database" config | grep "encoding" -- Unix系のコマンドラインでgrepをパイプでつないだもの">>="と"|"がそのまま対応している。下手したらモナドをパイプとして理解しそうで怖い。 その次のページの例は、returnをつかって上と同じことをしている。これもコマンドラインに対応物が。 return config >>= lookup "database" >>= lookup "encoding" cat config | grep "database" | grep "encoding""return"と"cat"が対応している。 Hask
目標がlivedoor ReaderをGmailに送ることなので、そこまでのメモ。 CPANからインストールしたので、~/.cpanができてて、Plagger一式もその下にある。 ~/.cpan/build/Plagger-0.7.2/examples以下のサンプルに合わせる*1ために、~/.cpan/build/Plagger-0.7.2以下を~/plaggerにコピー。 bash$ pwd /home/oto-oto-oto bash$ mkdir plagger bash$ cp -r ./.cpan/build/Plagger-0.7.2/* ./plagger/あと、yaml を設定しないといけないっぽいので、examplesのlivedoorreader2gmail.yamlを~/plaggerにコピーして編集。 global: plugin_path: - /home/oto
インストールができたので、メモ。 まず、しげふみメモ : Windowsで Plagger 準備#2 初めてCPANを使う を参考に CPAN の初期設定。 キャッシュサイズも、リンク先と同じように 100MB にしておいた。 で、 bash$ perl -MCPAN -e shell cpan> install Plagger (中略) [Better Encoding detection] - Encode::Detect ...missing. ==> Auto-install the 1 optional module(s) from CPAN? [y] n (中略) Running make install make test had returned bad status, won't install without force cpan> q途中で色々、[y/n] を聞かれる
このページを最初にブックマークしてみませんか?
『oto-oto-oto’s diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く