最近やったことのまとめ。 CPSのモナド変換子 fumieval.hatenablog.com で作ったmtl-cの塵を払い、Hackageにリリースした。 StateTやWriterTは中でタプルを作ったり壊したりしているが、CPS変換するとそれがなくなり、しかも(>>=)も最適化されるためそれなりのパフォーマンスの向上が期待できる。モナドガチユーザにおすすめだ。 補足 GHC 7.10.1現在、StateTに関しては最適化がうまく効くらしく、Lazy、Strict、CPS版のパフォーマンスはほぼ同じだった。一方、CPS版WriterTは正格にしているためか、Strictの4倍、Lazyの8倍の速度を発揮した。なお、CPS版はベースのモナドが重いときには特に効果的に働く。 後悔なく具現化できるモナド monad-skeletonというパッケージを公開した。インターフェイスとしては普通のO
世間の嫌われ者を、あえて擁護したり偏愛するつもりはないのですけど、goto文や大域変数は面白いし、好きだなー。過去の記事を参照しながら、goto文や大域変数の面白さについてナニヤラごたごたと書いてみます。 内容: gotoの棲み家 大域変数と例外の扱い方 必要悪としてのキャッチとミューテーション gotoの棲み家 タチの良いgoto文は、エルゴット繰り返し(Elgot repetition)演算子とみなされます。エルゴット繰り返し演算子は、コンウェイ不動点演算子の双対です。そのことは次の記事で述べました。 絵算で見る「カザネスク/ステファネスク/ハイランド/長谷川の定理」 データ・コード双対性、エルゴット繰り返し、ツインコードスタック抽象機械 あんまりタチの良くないgoto文もCPS(継続渡し方式)変換でだいたいは説明が付きます。 CPS(継続渡し方式)変換をJavaScriptで説明して
昨日、CPS(継続渡し方式)への変換を話題にしました。 最近CPSに凝っているらしいid:higeponさんが: 人間の皮が裏返る。外が内、内が外。みたいなイメージでしょうか。 と書いてます(CPSで思考する - higepon blog)。この裏返る感じを説明してみたいと思います。 プログラムが、3つの部分A, B, Cから構成されているとします。 A; B; C; A, B, Cは単一の文ではなくて大きなブロックでもかまいません。ブロックAの計算結果は変数aに代入され、ブロックBの計算結果は変数bに代入されるとしましょう。それぞれのブロックを関数化すると、次のようになります。 a = A(); b = B(a); c = C(b); 変数cの値がプログラム全体の結果となります。 中間変数a, bは不要なので除去すると: c = C(B(A())); 結局、プログラム全体の機能は、C(B
HaskellでCPS変換とか調べているとデータ型のCPS変換というのが出てくる. 関数のCPS変換は継続を引数に追加して末尾再帰の形にすればだいたいOKなのでまあわかるのだけど, データ型のCPS変換というのは何なんだという話. 継続は何を継続しているのかがいまいち分からないので何故そのデータ型はCPS変換するとその型になるんだと不思議に思っていたのがちょっと解決したのでそれについて書く. 関数 is っょぃ パフォーマンスのことを考えれば, 関数型と基本型(ground type)が型の中では圧倒的に偉い. 基本型というのはまぁproductとかrecursionとかdependent typeとかを含まない基本的な型のこと. 例えばIntとか(Haskellのような言語ではIntというのは計算機の都合上特別扱いされているので, ここでのIntはN×Nにring構造を入れたもののことで
Ryan Orendorff presents a tutorial about using continuation passing style in Haskell. He starts with an introduction that looks a lot like how other functional languages do continuations, then refactors the example to use monads. The continuation monad has been called the “mother of all monads” because of its flexibility. See it in action in the video below. Summary The basics of Continuation Pass
All about monads の解読が Continuation Monad になってストップしてしまった。そもそも、継続渡しスタイル CPS や継続 contiuation の意味がよくわかっていなのだから無理もない。お茶を濁してそれらしい記事にしてもいいのだが、自分もわかっていないし、意味の分からない文章を読まされる人も迷惑だろう。 そこで、いつもの様に Google 先生に継続について聞いてみた。できれば日本語の文書が欲しかったのだが、納得できるものが見つからなかった。そこで "continuation monad" で検索して WikiBooks の "Haskell/Continuation passing style" という記事を見つけた。continuation monad だけでなく、継続の初歩から分かるような例がついているようなので挑戦してみる。 しかし、冒頭の C
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く