Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

すごいMonad入門

1,890 views

Published on

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

Published in: Technology
  • Be the first to comment

すごい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. 時間があれば質疑応答に入ります ご清聴 ありがとうございました

×