すごいMonad入門

1,688 views

Published on

第4回 #LT駆動 の発表スライドです

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,688
On SlideShare
0
From Embeds
0
Number of Embeds
206
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

すごいMonad入門

  1. 1. すごいMonad入門 #LT駆動 2014/06/07 @minamiyama1994
  2. 2. 今日の流れ ● 自己紹介 ● Monadとはどんなものか ● Monadはどのように使えるのか ● まとめ ● 質疑応答
  3. 3. 自己紹介 ● (ry
  4. 4. Monadとはどんなものか ● Haskellなどにある汎用的な抽象化機構 ● 自己関手の圏におけるモノイド対象 ○ わからん ● 圏論とか関係あるらしい、よく知らない ● 使えればおk ● 簡単にいえば「特定の文脈の中で値を取り扱う ための抽象化」
  5. 5. Monadとはどんなものか ● 今日はHaskellのMonadについて説明します
  6. 6. Monadとはどんなものか ● IO Monad ○ 副作用が起こりうると言う文脈 ● Maybe Monad ○ 値がないかもしれないという文脈 ● Either e Monad ○ 正常値以外の値があるかもしれないという文脈 ● リスト Monad ○ 0個以上の値があるという文脈
  7. 7. Monadはどのように使えるのか ● returnを使って普通の値をMonadに包むことが できる ● 逆にMonadから値を取り出すことは? ○ →一般的には出来ない ● でも、中の値を元に計算したい ● なおかつ、内部実装はできるだけ見たくない
  8. 8. Monadはどのように使えるのか ● 内部の値にアクセスする方法はMonad側で用 意 ○ ユーザ側は具体的なアクセス方法を知らなくても抽象化 された方法で内部の値にアクセスできる ● >>=演算子 ○ 左辺にMonadに包まれた値 ○ 右辺にMonadに包まれた値を元に計算する関数 ● 内部実装を気にしなくていい!
  9. 9. Monadはどのように使えるのか ● return ○ モナドの文脈で普通の値を扱えるように変換する ● >>= ○ モナドの文脈にくるまれた値を普通の関数に食わせる ● >> ○ 左辺の文脈を踏まえた上で右辺を返す ● do ○ 上記の演算子などを用いたシンタックスシュガー
  10. 10. Monadはどのように使えるのか ● 基本的に使うのはdo,return,>>=,>> ● return,>>=,>>だけを組み合わせて書くこともで きる ○ ちょっと読みにくいことがある ● doを使えば手続き的に書ける ○ 直感的
  11. 11. Monadはどのように使えるのか ● コード例 main :: IO ( ) main = getLine >>= x -> putStrLn ( x ++ “さん こんにちは!” )
  12. 12. Monadはどのように使えるのか ● コード例 main :: IO ( ) main = do x <- getLine putStrLn ( x ++ “さんこんにちは!” )
  13. 13. Monadはどのように使えるのか ● Monadのユーザに直感的な記法を与えること ができるので、DSL作成などに活用できる ○ YesodのHandlerなど多くのライブラリがMonadを活用 ● 内部実装を抽象化したままユーザにデータを操 作させることができる
  14. 14. Monadはどのように使えるのか ● モナドの使い方は分かった、作り方は? ○ 知らん ● Monad則というのを満たしていればいいらしい ● Free MonadとかOperational Monadとかある ので直接つくる必要性はあまりないかも ● 大体やりたいことは既にライブラリとしてあった りするので使えれば大体なんとかなる
  15. 15. まとめ ● モナド便利です、使えるようになりましょう ● これであなたもHaskeller![要出典] ● コードはGistとGithubにあります ○ https://gist.github. com/minamiyama1994/652f5331d71a38d 169ff ○ https://github. com/minamiyama1994/LTDD/tree/04
  16. 16. 時間があれば質疑応答に入ります ご清聴 ありがとうございました

×