• マックで昼飯。どっかのダディが大量注文かまして後ろに行列ができてた。

ad12f59f.jpg

  • ビルに到着したが早すぎたか人気なし。

b76acc60.jpg

DSC09815

  • 会場説明など

DSC09821DSC09823

[2012-10-13 13:05]DSC09824DSC09818

第10章 関数型問題解決法 / @dekokun

DSC09825DSC09826DSC09827DSC09828DSC09829

[2012-10-13 13:53]

DSC09830DSC09831

第11章 ファンクターからアプリカティブファンクターへ / @UsrNameu1

  • http://www.slideshare.net/UsrNameu1/applicative-functor
  • 物理専攻だった、趣味は登山と囲碁、
  • ファンクター: map overできる型クラス
    • class Functor f where
    • fmap :: (a -> b) -> f a -> f b
    • fは型コンストラクタで(:k fで *->* を返す)
    • fmapは箱の中身をいれかえるもの。
  • 文脈: computational context
    • ファンクターを箱ととらえるのか文脈としてとらえるのか...
  • (->)は2つの型をとって関数を返す型コンストラクタ。
  • lifting:視点をかえたみかた
  • ファンクター則
    • 1. 恒等関数の保存: fmap id (f a) = id (f a)
    • 2. 合成関数の分配: fmap (g . h) (f a) = fmap g (fmap h (f a))
    • 圏論とかの数学的要求に従うために必要
    • 「fmapを先に出してからファンクター則を出してくる本の流れはどうなのか?」
    • かずさん
      • 〜則は知らない方がいい。作る人は〜則に従って作らないといけないけど、使う人(入門書)には書く必要がない。
      • "a==b かつ b==c なら a==c" みたいな、あたりまえなことを形式化すると気になってしまう。
      • 定義が与えられた方が分かる人と、具体例じゃないと分からない人と、
      • Maybeのfmapは失敗しない全域関数を失敗しうる関数にliftする。
      • Maybeの文脈は「失敗するかもしれない」
      • IOもParserもファンクターだけど、両者は混ざらない。(レゴ社のレゴはレゴ社のレゴとしかくっつかない)
      • ファンクターの使い道はIOで無駄な変数が変数が減ること! (let line <- fmap reverse getLine のところ) これだけ覚えてください!
      • line <- reverse <$> getLine と書くのが流行。 (<$> == `fmap`) こう使うんだというのが重要。
  • 文脈のなかに入ってしまった値を取り出す一般的な方法はない。
    • かずさん: 箱のなかの値はパターンマッチでとりだせる。でもデータコンストラクタがexportされてないと取り出せない。IOはexportされてない。(一般用語だと:抽象データ型は値をとりだせない。)
  • かずさん: リストは構文糖衣が多い。
  • アプリカティブ則: pure f <*> x = fmap f x

DSC09832DSC09833DSC09834DSC09835DSC09836DSC09837DSC09838DSC09839DSC09840DSC09841DSC09842DSC09843

[2012-10-13 15:11]

(一旦休憩)

(テザリング禁止:APがいっぱい立ってる〜)

  • ひびのさん: スタックオーバーフローはパターンマッチとか関数の引数があやしい。組み込みの+は別。Haskellはlazy thunkがむつかしい。
  • 小銭なく、自販機でジュースが買えなかったorz

DSC09844DSC09848

DSC09847

[2012-10-13 15:36]

(発表のつづき)

  • liftA2意外にもいろいろ便利そうな関数はある(haskell.org)
  • 記号だらけのコードをグレードアップできるよ。

DSC09849DSC09850DSC09851DSC09852

[2012-10-13 15:52]

  • かずさん:
    • liftA2は知らなくてもいい(applicativeスタイルがないときのもの)。数字ものは数字が途中で打ち切られてしまう。liftMとかも忘れて。
    • sequenceはモナド、sequenceAはアプリカティブ。分かれているのは歴史的経緯。sequenceはリストしかとれない。文脈の内側と外側を入れ替えるもの。 → Data.traversable http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Traversable.html

[2012-10-13 15:58]

[2012-10-13 16:00]DSC09854

演習タイム

ファンクターを使って書き直す 次のコードをファンクターを使って書き直してみよう / @copippyDSC09855

DSC09858DSC09859

YukiさんDSC09860

  • かずさん: applicativeは逐次実行を簡潔に書く方法。
  • ひびのさん: 引数の順序とIOの順序が違うときにはつかえないので注意。

DSC09866DSC09867DSC09868DSC09869DSC09870DSC09871

むりやりアプリカティブスタイルにDSC09874

DSC09875DSC09876DSC09877DSC09878DSC09879

パーサーのはなしDSC09881

[2012-10-13 17:33]

LTコーナー

Offline Hoogleで何処でもはすはす / Kiwamu OkabeDSC09888

DSC09890DSC09891DSC09892DSC09893

[2012-10-13 17:41]

HaskellとScala / @xuwei_k DSC09896

  • http://xuwei-k.github.com/slides/haskell_scala/
  • scalaをつかって仕事してたことがあった。無職。
  • 「すからつかったことがあるひと〜」 けっこう手が挙がった。1/3〜1/2くらい?
  • implicitは型クラスのための構文
    • implicit def → instance
  • scalazにいろんな型クラスの定義がある。(標準ライブラリにはほとんどない)
  • ekmett?
  • ☆もちゃんとした演算子。なんとなくじゃなくて数学のなんとかスターに由来。でも不評らしい。

[2012-10-13 17:56]

Haskellはじめました / @seizansDSC09902

  • Haskellを仕事で書いてもらう.
  • HaskellでAWS → aws-sdk
  • 部署の25%くらいがHaskellの読み書き可能
  • javaだと1日3APIくらいのところが10APIくらい書けた、らしい。
    • やっぱパーサー書くのは早いよね。

DSC09904DSC09905DSC09906DSC09907DSC09908DSC09907DSC09908

[2012-10-13 18:04]

フットサル / @kazu_yamamoto

  • 前回参加者 12名 (うち女性2名)
    • 1人100円
  • 「品川でゆるいフットサル」でぐぐって

DSC09909DSC09912

[2012-10-13 18:08]

その後、懇親会がインド屋で行われたらしい。

DSC09915