makopi23のブログ

makopi23が日々の生活で感じたことを気ままに綴るブログです。

「第5回 スタートHaskell2」に参加しました

2012/10/13(土) 「第5回 スタートHaskell2」に参加してきました。

PARTAKE(告知サイト)
http://partake.in/events/c18d7583-75b8-45e9-990d-041215c1fe29#

togetter
http://togetter.com/li/389173

以下の書籍をテキストとした、セミナー形式と演習形式を組み合わせた勉強会なのです。
すごいHaskellたのしく学ぼう!すごいHaskellたのしく学ぼう!
(2012/05/23)
Miran Lipovača

商品詳細を見る


場所は IIJ 大会議室 (17階)です。参加者は60人くらいでしょうか。
今回は以下の2章が対象範囲です。

・10章: 関数型問題解決法
・11章: ファンクターからアプリカティブファンクターへ

特に11章のアプリカティブファンクターは、モナドの謎を解き明かす鍵(?)になるそうです。

あまり予習時間は取れませんでしたが、一読し、可能な限り本のソースコードを写経してから参加しました。


10章: 関数型問題解決法
haskell_section10.jpg
(↑クリックすると発表資料に飛びます↑)

発表者は @dekokun さんです。
ソースコードはgithubに公開してくださっています。親切設計ですねー。
https://github.com/dekokun/StartHaskell2-Chapter10

■P.216のsolveRPN関数で、たった1行追加するごとに計算機能が1個増えるのはHaskellの威力かも。
■P.225に runhaskell コマンドが出てきてるが、初めて知った。。。便利ですねー

新しい何かを紹介する章ではなく、これまでの章の機能を使って課題を解決してみる、って位置づけの章ですね。
いつかスラスラとこんな課題をHaskellで解けるようになりたい。。。


11章: ファンクターからアプリカティブファンクターへ
Applicative functor from Yuichi Adachi


発表者は @UsrNameu1 さんです。以下、メモ。
---

■Applicativeはまずこれを読んで使い方を覚えるのが良い。理屈を理解するのは、あとからで良い。
 ・Applicativeのススメ
  http://d.hatena.ne.jp/kazu-yamamoto/20101211/1292021817
  by @kazu_yamamoto さん(ツイート)

■発表資料のP.7にあるCASE3が、Applicative Functorで一番大事な本質。
 line'という変数を無くせるのが良いところ。これを無くすためにFunctor則がある。

■fmapは<$>という記号を使うのが流行とのこと。以下2つは同じ意味。
 ① line <- reverse <$> getLine
 ② line <- reverse `fmap` getLine

■Listのmap
 map :: (a -> b) -> [a] -> [b]
 は、以下の構文糖衣である。
 map :: (a -> b) -> [] a -> [] b

■この章に出てくる「文脈」という単語について。
 ParserとIOはくっつかない。それは文脈が違うから。
 例えば、おもちゃのブロックで、レゴ社のブロックはレゴ社のブロックにしかくっつかない。
 ここで「レゴ」ってトコが文脈にあたる。

 ・「IO」の文脈は、副作用を起こすことができる、ということ。
 ・「Maybe」の文脈は、失敗するかもしれない、ということ。
 ・「List」の文脈は、非決定的な計算ができる、ということ。



演習問題
10章と11章の発表の後は、毎度恒例の演習タイムです。

・10章の演習問題: http://wiki.haskell.jp/Workshop/StartHaskell2/exercise10
・11章の演習問題: http://wiki.haskell.jp/Workshop/StartHaskell2/exercise11

---
11章
■ファンクターを使って書き直す その1
main = do
    xs <- getLine
    let ws = words xs
    mapM_ putStrLn ws
 ↓ ファンクターを使って書き直す ↓
main = do
    xs <- fmap words getLine
    mapM_ putStrLn xs

■ファンクターを使って書き直す その2
main = do
    xs <- getLine
    let n = sum $ map read $ words xs
    print n
 ↓ ファンクターを使って書き直す ↓
main = do
    n <- fmap (sum . map read . words) getLine
    print n

■モナドをアプリカティブに書き直す
main :: IO ()
main = do
  putStrLn "What's your name?"
  name <- getLine
  putStrLn $ "Hello, " ++ name
 ↓ アプリカティブに書き直す ↓
import Control.Applicative

main = do
    putStrLn "What's your name?"
    putStrLn =<< (++) <$> return "Hello " <*> getLine

■GHCIで :set prompt > と打つと、長いプロンプト文字列が > に変更される。
 importをたくさんしてるときに便利かも。

■パーサーコンビネータの演習は、私の頭脳では着いていけず。。。



LTタイム
演習タイムの次はLTタイムです。

LT1 「Offline Hoogleで何処でもはすはす」

Offline Hoogleで何処でもはすはす from Kiwamu Okabe

発表は @master_q さんです。

ユーモア溢れるハイテンションLT。あと、Debian、今日もやっぱ出ました~。内容も実用的です。

LT2 「Haskell と Scala」
haskell_scala.jpg
(↑クリックすると発表資料に飛びます↑)
発表は @xuwei_k さんです。

私、Scalaはちょっと前の勉強会で触ったくらいです。Scalaも、もっと勉強してみたいな。
Scalaで型を扱うのは、Haskellに比べて大変そうですねー

LT3 「Haskell で AWS」
発表は @seizans さんです。

・会社でHaskellの仕事を作り出したい。部署の25%くらいのエンジニアはHaskellが使える。
 → ということで、実際にHaskellの仕事を社内で作り出して、やってみた。
・HaskellからAWSのAPIを操作できるようにするライブラリを一人のエンジニアに作成してもらい、公開した。
 http://hackage.haskell.org/package/aws-sdk
・開発してみて、やっぱJavaよりもHaskellの方が生産性が良いとのこと。
 (例: Javaだと3API/日、Haskellだと10API/日 etc)

Haskellで仕事、俺にはまだまだ、とても無理そうです。。。
でも、いつかHaskellをマスターして、はすはすできるようになりたい。

---
しかし、どのLTもとても濃い内容で充実した内容でしたねー

あと最後に @kazu_yamamoto さんからフットサルのお誘いがありました。↓ですね。
品川でゆるいフットサル(2)
品川でゆるいフットサル(3)




★感想:
アプリカティブファンクター、難しいです。。。時間無くて、11章の最後の方まで読めてないトコあるし。
これは復習しないと、以降のモナドとかで間違いなく躓きそう。
もっと早くから予習に着手しないと、ということで反省。

運営者さん、発表者さん、ありがとうございました。
関連記事
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://makopi23.blog.fc2.com/tb.php/25-2240a98a
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad