Submit Search
Upload
すごいMonad入門
•
1 like
•
2,184 views
真一 北原
Follow
第4回 #LT駆動 の発表スライドです
Read less
Read more
Technology
Report
Share
Report
Share
1 of 16
Download now
Download to read offline
Recommended
Monad tutorial
Monad tutorial
Hideyuki Tanaka
Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのか
Kousuke Ruichi
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
Start!! Ruby
Start!! Ruby
mitim
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno
関数型プログラミングとモナド
関数型プログラミングとモナド
Masayuki Isobe
モナモナ言うモナド入門
モナモナ言うモナド入門
Masahiro Honma
null使ったら負け福岡版
null使ったら負け福岡版
なおき きしだ
Recommended
Monad tutorial
Monad tutorial
Hideyuki Tanaka
Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのか
Kousuke Ruichi
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
Start!! Ruby
Start!! Ruby
mitim
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno
関数型プログラミングとモナド
関数型プログラミングとモナド
Masayuki Isobe
モナモナ言うモナド入門
モナモナ言うモナド入門
Masahiro Honma
null使ったら負け福岡版
null使ったら負け福岡版
なおき きしだ
循環参照のはなし
循環参照のはなし
Masahiro Honma
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
Tomoharu ASAMI
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
Masahiro Sakai
Nullのはなし(up用)
Nullのはなし(up用)
Souki Tanaka
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Roy Kim
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
tadaaki hayashi
たのしい高階関数
たのしい高階関数
Shinichi Kozake
圏とHaskellの型
圏とHaskellの型
KinebuchiTomo
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
Database.persistentの話
Database.persistentの話
真一 北原
能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発
真一 北原
型! 型!
型! 型!
真一 北原
型!
型!
真一 北原
templateを依存型っぽく使ってみる
templateを依存型っぽく使ってみる
真一 北原
すごいCoq入門
すごいCoq入門
真一 北原
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた
真一 北原
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果
真一 北原
More Related Content
Viewers also liked
循環参照のはなし
循環参照のはなし
Masahiro Honma
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
Tomoharu ASAMI
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
Masahiro Sakai
Nullのはなし(up用)
Nullのはなし(up用)
Souki Tanaka
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Roy Kim
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
tadaaki hayashi
たのしい高階関数
たのしい高階関数
Shinichi Kozake
圏とHaskellの型
圏とHaskellの型
KinebuchiTomo
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
Viewers also liked
(14)
循環参照のはなし
循環参照のはなし
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
Nullのはなし(up用)
Nullのはなし(up用)
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
たのしい高階関数
たのしい高階関数
圏とHaskellの型
圏とHaskellの型
関数プログラミング入門
関数プログラミング入門
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
More from 真一 北原
Database.persistentの話
Database.persistentの話
真一 北原
能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発
真一 北原
型! 型!
型! 型!
真一 北原
型!
型!
真一 北原
templateを依存型っぽく使ってみる
templateを依存型っぽく使ってみる
真一 北原
すごいCoq入門
すごいCoq入門
真一 北原
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた
真一 北原
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果
真一 北原
型安全Printf作ってみた
型安全Printf作ってみた
真一 北原
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた
真一 北原
第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料
真一 北原
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
真一 北原
More from 真一 北原
(12)
Database.persistentの話
Database.persistentの話
能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発
型! 型!
型! 型!
型!
型!
templateを依存型っぽく使ってみる
templateを依存型っぽく使ってみる
すごいCoq入門
すごいCoq入門
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果
型安全Printf作ってみた
型安全Printf作ってみた
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた
第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
すごいMonad入門
1.
すごいMonad入門 #LT駆動 2014/06/07 @minamiyama1994
2.
今日の流れ ● 自己紹介 ● Monadとはどんなものか ●
Monadはどのように使えるのか ● まとめ ● 質疑応答
3.
自己紹介 ● (ry
4.
Monadとはどんなものか ● Haskellなどにある汎用的な抽象化機構 ● 自己関手の圏におけるモノイド対象 ○
わからん ● 圏論とか関係あるらしい、よく知らない ● 使えればおk ● 簡単にいえば「特定の文脈の中で値を取り扱う ための抽象化」
5.
Monadとはどんなものか ● 今日はHaskellのMonadについて説明します
6.
Monadとはどんなものか ● IO Monad ○
副作用が起こりうると言う文脈 ● Maybe Monad ○ 値がないかもしれないという文脈 ● Either e Monad ○ 正常値以外の値があるかもしれないという文脈 ● リスト Monad ○ 0個以上の値があるという文脈
7.
Monadはどのように使えるのか ● returnを使って普通の値をMonadに包むことが できる ● 逆にMonadから値を取り出すことは? ○
→一般的には出来ない ● でも、中の値を元に計算したい ● なおかつ、内部実装はできるだけ見たくない
8.
Monadはどのように使えるのか ● 内部の値にアクセスする方法はMonad側で用 意 ○ ユーザ側は具体的なアクセス方法を知らなくても抽象化 された方法で内部の値にアクセスできる ●
>>=演算子 ○ 左辺にMonadに包まれた値 ○ 右辺にMonadに包まれた値を元に計算する関数 ● 内部実装を気にしなくていい!
9.
Monadはどのように使えるのか ● return ○ モナドの文脈で普通の値を扱えるように変換する ●
>>= ○ モナドの文脈にくるまれた値を普通の関数に食わせる ● >> ○ 左辺の文脈を踏まえた上で右辺を返す ● do ○ 上記の演算子などを用いたシンタックスシュガー
10.
Monadはどのように使えるのか ● 基本的に使うのはdo,return,>>=,>> ● return,>>=,>>だけを組み合わせて書くこともで きる ○
ちょっと読みにくいことがある ● doを使えば手続き的に書ける ○ 直感的
11.
Monadはどのように使えるのか ● コード例 main ::
IO ( ) main = getLine >>= x -> putStrLn ( x ++ “さん こんにちは!” )
12.
Monadはどのように使えるのか ● コード例 main ::
IO ( ) main = do x <- getLine putStrLn ( x ++ “さんこんにちは!” )
13.
Monadはどのように使えるのか ● Monadのユーザに直感的な記法を与えること ができるので、DSL作成などに活用できる ○ YesodのHandlerなど多くのライブラリがMonadを活用 ●
内部実装を抽象化したままユーザにデータを操 作させることができる
14.
Monadはどのように使えるのか ● モナドの使い方は分かった、作り方は? ○ 知らん ●
Monad則というのを満たしていればいいらしい ● Free MonadとかOperational Monadとかある ので直接つくる必要性はあまりないかも ● 大体やりたいことは既にライブラリとしてあった りするので使えれば大体なんとかなる
15.
まとめ ● モナド便利です、使えるようになりましょう ● これであなたもHaskeller![要出典] ●
コードはGistとGithubにあります ○ https://gist.github. com/minamiyama1994/652f5331d71a38d 169ff ○ https://github. com/minamiyama1994/LTDD/tree/04
16.
時間があれば質疑応答に入ります ご清聴 ありがとうございました
Download now