- 2012-10-13 13:00〜18:00 神保町 IIJ
- http://partake.in/events/c18d7583-75b8-45e9-990d-041215c1fe29
- まとめ http://togetter.com/li/389173
- マックで昼飯。どっかのダディが大量注文かまして後ろに行列ができてた。
- ビルに到着したが早すぎたか人気なし。
- 会場説明など
第10章 関数型問題解決法 / @dekokun
- http://dekokun.github.com/StartHaskell2-Chapter10/?theme=beige&transition=page#/
- 仕事では動的型付け言語をつかっている。
- 「シェルスクリプト maybeモナド」で検索。
- solveRPN :: String -> double 「型があれば幸せになれる!」
- 「つづきはvimで、ということで...」
- 14章でMaybeモナドをまなぶと、失敗したときにNothingを変えせるようになる。(Exceptionになっちゃうんじゃなくて)
- makeRandomPath.hs
- 10万行くらいのroadをくわせたらstack overflowした...
- foldlをfoldl'にしたりsumをfoldl'(+)0にしてもやはりstack overflowした...
- かずさん「よくみないとわからないので」
- https://github.com/dekokun/StartHaskell2-Chapter10/blob/master/notLazyToLondon.hs
[2012-10-13 13:53]
第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
[2012-10-13 15:11]
(一旦休憩)
(テザリング禁止:APがいっぱい立ってる〜)
- ひびのさん: スタックオーバーフローはパターンマッチとか関数の引数があやしい。組み込みの+は別。Haskellはlazy thunkがむつかしい。
- 小銭なく、自販機でジュースが買えなかったorz
[2012-10-13 15:36]
(発表のつづき)
- liftA2意外にもいろいろ便利そうな関数はある(haskell.org)
- 記号だらけのコードをグレードアップできるよ。
[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]
演習タイム
- http://wiki.haskell.jp/Workshop/StartHaskell2/exercise10
- http://wiki.haskell.jp/Workshop/StartHaskell2/exercise11
ファンクターを使って書き直す 次のコードをファンクターを使って書き直してみよう / @copippy
Yukiさん
- かずさん: applicativeは逐次実行を簡潔に書く方法。
- ひびのさん: 引数の順序とIOの順序が違うときにはつかえないので注意。
むりやりアプリカティブスタイルに
パーサーのはなし
[2012-10-13 17:33]
LTコーナー
Offline Hoogleで何処でもはすはす / Kiwamu Okabe
- http://www.slideshare.net/master_q/20121013-offline-hoogle2
- 電車の中でふぐりたい〜
- リンクもcgiになてるよ〜
- apachの設定はモジュラリティが高いというのが重要
[2012-10-13 17:41]
HaskellとScala / @xuwei_k
- http://xuwei-k.github.com/slides/haskell_scala/
- scalaをつかって仕事してたことがあった。無職。
- 「すからつかったことがあるひと〜」 けっこう手が挙がった。1/3〜1/2くらい?
- implicitは型クラスのための構文
- implicit def → instance
- scalazにいろんな型クラスの定義がある。(標準ライブラリにはほとんどない)
- ekmett?
- ☆もちゃんとした演算子。なんとなくじゃなくて数学のなんとかスターに由来。でも不評らしい。
[2012-10-13 17:56]