RWH 読書会 2010-01

また、参加させてもらいました。

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング

とりあえず、メモだけ貼付けます。

  • 5分ほど遅れていったら cut-sea さんしかいないお
  • 1時間くらいして nobsun 登場
  • どこまでやったっけ? でしばらく悩むw
    • 多分、10月やったのが最後
    • とりあえず、9章から始めてみる

9章 入出力事例研究: ファイルシステム検索ライブラリ

  • Unix の find コマンドをいくつかの方法で作りましょう、という章
  • find って Unix ぽくないよね by cut-seaさん
9.2 ディレクトリの再帰的リストアップ
  • forM :: (Monad m) => [a] -> (a -> m b) -> m [b]
    • mapM の引数を逆にしたもの
  • 9.2.2 なぜ mapM と forM の両方が用意されているのか
    • 処理のほうが長いかリストの方が長いか
9.3 素朴な検索関数
  • を実装してみせてから、問題点を列挙して、あとにつづける
    • 「sinpleFind は正格」ってどういうこと?
      • unsafeInterleaveIO でいいよね by shelarcy さん
9.4 述語: 純粋性を保ちつつ、貧弱な機能から充実した機能へ
  • ファイル名しか見ていない問題
  • System.Directory モジュール
  • filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
  • 純粋な述語 p を入出力をうけもつ check でラップして、filterM でフィルタする
9.5 ファイルサイズを安全に決める
  • hFileSize をラップ
  • handle って前に出てたっけ?
  • 例外を投げられると hClose が呼ばれない問題
  • 9.5.1 獲得-使用-解放サイクル
    • bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
9.6 述語用の特定問題領域言語 (DSL)
  • うまく、まとめられない…
  • 9.6.1 持ち上げを使ってボイラープレートを回避する
    • 持ち上げ?

(>) のような関数をとって、その関数を別の文脈で作用する関数 (ここでは greaterP) に変換することを、その文脈持ち上げると言います。

liftP  q f k w x y z = f w x y z `q` k
liftP2 q f g w x y z = f w x y z `q` g w x y z
liftP' q f k w x y z = f w x y z `q` (constP k) w x y z
  • 9.6.3 新しい演算子を定義して使う
9.7 走査方法の制御
  • 書いてある通り「いままでない濃い関数定義」
  • ><
  • 急に難易度が上がったなぁ…。by nobsun
9.8 密度、可読性、学習プロセス
  • この節のコードを 9.7 のと比べてみればいいんだな
9.9 走査の別の見方
  • 畳み込みとしてみる
  • walk が末尾再帰てのは本当か?
    • walk が呼んでる fold は walk を呼んでるよね
    • ??
    • 私見としては、末尾再帰と呼んでいいんじゃないかなぁ?
    • と思ったけど、違うみたい
      • 終わらせたいところで終わらせられてないよね、と
9.10
  • 特になし
  • 9.10.1 よく使われるレイアウトスタイル
    • やっぱりこういう話題はもりあがるw

番外編: nobsun の fold

ありゃ、コードめもってないや。foldl と foldr をいっぺんに行う fold.

どーしてこんなの思いつけるんだろう?

追記

2010-01-18

懇親会、その他

  • tantanmenbot を紹介した。
  • shelarcy さんの連載、もう少しがんばって読みます…。