タグ

ブックマーク / mizondev.net (2)

  • CPSで実装したモナドは何故速いのか - Mizon Dev Diary

    2014-01-20 CPSで実装したモナドは何故速いのかモナド変換子の速さを測ってみる - モナドとわたしとコモナドCPSでモナドを実装すると速くなるらしい。以前、その理由について考えてみたのだが、結論に達しなかった。そこで、続きを書く。まず、Twitterである方に教えていただいたのだが、CPSで実装したモナドは、非CPSで実装したモナドに比べて次の2点の理由により高速であるという。データの生成/分解が抑えられるから合成時に継続を破棄できるからどういうことなのだろうか。Maybeモナドを例として以上の2点を確認したい——。と、確認したかったのだが、検証したところ、1点目については結論を得たものの、2点目については「速くならない」という矛盾した結論が出てしまった。そこで、以上の1点目についてのみ検証した記録をつける。非CPS版Maybeモナドまず、非CPS版のMaybeモナドの定義は以下

    xef
    xef 2014/01/20
  • Free モナドは有効? - Mizon Dev Diary | 2013-04-20

    Free モナドは有効?ここ数日 Free モナドについて調べていて気になったことがあるので書く。Free モナド。興味深い名前のこのモナドはいくつかの興味深い特徴を持つ。現時点で自分が知っているのは次の3点。データ型 f を Functor のインスタンスにすると Free f が Monad のインスタンスになるFree f は mtl の型クラスをはじめとする多数の型クラスのインスタンスになる (地道にインスタンスを定義するのはめんどい)Free モナドのアクション Free f a は任意のモナド m のアクション m a に変換できるFree モナドを実用する観点でこれらの特徴を見ると、3点目の Free モナドを任意のモナドに変換できる特徴に注目したい。これは、Free モナドの各アクションをインターフェースと見立ててプログラミングをすると、インターフェースの実装コードをそのプ

  • 1