20130331 - kyosen/learn-you-a-haskell GitHub Wiki

活動概要

  • 日時:2013年03月31日(日)13:00~16:30
  • 参加者:伊藤、乙村、矢野、辻
  • 内容:すごい Haskell たのしく学ぼう! 第14章~第15章

第14章 もうちょっとだけモナド

14.1 Writer?中の人なんていません!

  • 「中の人」って何?(伊藤)

    • ログの収集や値の足しこみとかを「中の人」がしているように見えるから?(伊藤)
    • 自分で書かないと何もしてくれないから。(矢野)
  • 以前やった Pot の問題で使えるかも。(伊藤)

  • P.325 「非効率なリスト構築」で、左結合の効率が悪い理由は?(乙村)

    • Haskell のリストは単方向リストかつ不変なので、先頭への要素追加は効率的だが、最後への要素追加はリストの再構築が必要になり非効率だから。(伊藤)
    • P.8 「2つのリストを連結するとき、Haskell は1つ目のリストを最後まで走査します」(矢野)

14.2 Reader?それはあなたです!

  • Leader とかけている?(辻)

    • 「読者」だから。
    • er のあとにジョークを言うのがお決まりらしい。(乙村)
  • Writer と対になってるわけではない?(矢野)

  • 共通の値を読んでいる。

14.3 計算の状態の正体

  • 状態を変えられないので、前の状態から後の状態への関数として扱っている?(伊藤)
  • IO モナドのステートは…?(乙村)
    • IO モナドのステートは外に見えない。(伊藤)

14.4 Error を壁に

  • Java で String が Error インターフェースを implements したら気持ち悪いが、Haskell だとあまり違和感がない。(伊藤)
  • Ruby on Rails でも、String や Number に変換メソッドが追加されているが、気持ち悪い。(伊藤)
    • Ruby では String クラス自体にメソッドを追加している(たぶん)。(伊藤、矢野)
    • アプリケーション内でグローバルに影響する。
  • Scala の implicit conversion でも同じようなことができる。(乙村)
    • その文脈でしか機能しないので、あまり違和感ない。(伊藤)

14.5 便利なモナディック関数

14.6 安全な逆ポーランド記法電卓

14.7 モナディック関数の合成

14.8 モナドを作る

第15章 Zipper

  • Zipper とは?(伊藤)
    • データ構造の中を上がったり下がったりすることを Zipper に例えている。(矢野)
    • あるいは、ファスナー、チャック etc.

15.1 歩こう

15.2 リストに注目する

15.3 超シンプルなファイルシステム

15.4 足下にご注意

15.5 読んでくれてありがとう!

次回の予定