SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
すごいHaskellたのしく学ぼう!
11. ファンクターからアプリカティブファンクターへ
伊勢  シン / 伊藤  伸裕
すごいHaskell読書会 in ⼤大阪#10 @ Fenrir Inc.
はじめるまえに
•  ファンクターそのもの、合点がいったのが昨⽇日
–  なので結構間違いがありそう。答え合わせしたい。
•  doitakaの⽇日記さんの下記のエントリが理理解する上で
とても助けになった。
–  関数がファンクターである、とは
•  http://d.hatena.ne.jp/doitaka/20130609/1370782111
–  Applicative、pure、関数についての再考、帰ってきた  
Functor
•  http://d.hatena.ne.jp/doitaka/20130613/1371146740
–  ファンクターとアプリカティブファンクター(解決編)
•  http://d.hatena.ne.jp/doitaka/20130618/1371571806
帰ってきたファンクター
•  「帰ってきた」
– そもそもファンクターってなんだったか。
– 第7章でやった話
•  「型や型クラスを⾃自分で作ろう」
•  7.11 Functor型クラス
Functor型クラス
•  Functor型クラス
– fmap だけをもっていて、具体的な実装がない
•  「ある型  a から別の型  b への関数」と、
•  「ある型  a に適⽤用さ  れたファンクター値」を取り、
•  「別の型  b のほうに適⽤用されたファンクター値」を返す。
•  「わけがわからなくても⼼心配無⽤用」で⾶飛ばしたけど、
向きあわなければならない時が来たらしい。
class Functor f where
fmap :: (a -> b) -> f a -> f b
ファンクター値って
•  Hoogle によると…
– リストはファンクター
– Maybe はファンクター
– Either a b も、
Either a まで部分適⽤用したらファンクター
instance Functor Maybe where
fmap _ Nothing = Nothing
fmap f (Just a) = Just (f a)
instance Functor (Either a) where
fmap _ (Left x) = Left x
fmap f (Right y) = Right (f y)
なんとなく⾒見見えた気がする
•  Functor の「写す」とはこういう感じだろうか。



f
a 


f
ba -> b
class Functor f where
fmap :: (a -> b) -> f a -> f b
なんとなく⾒見見えた気がする
•  Maybeだったら



Maybe
a 


Maybe
f af :: a -> b
instance Functor Maybe where
fmap _ Nothing = Nothing
fmap f (Just a) = Just (f a)
ここまで7章の復復習
•  「帰ってきた」
– そもそもファンクターってなんだったか。
– 第7章でやった話
•  「型や型クラスを⾃自分で作ろう」
•  7.11 Functor型クラス
ここまで7章の復習
cf. 第7回の練習問題
https://gist.github.com/yashigani/5231928#-12
ファンクターとしてのI/Oアクション
•  IOアクションもファンクター






return
(f result)f :: a -> b
instance Functor IO where
fmap f action = do
result <- action
return (f result)
外界
action result
IOアクションを実⾏行行
result に束縛
戻り値もIOアクションに
ならないといけないので、return  を使う。
ファンクターとしてのI/Oアクション実例例
•  ユーザーに⽂文字列列を⼊入⼒力力させて、逆順に出⼒力力
•  fmap で書ける
•  IOに対する名前付けを 1  こ減らせるので、
よりエレガントに書ける。
–  複数かけたいなら関数合成で (事前に定義・ラムダでもいい)
main = do line <- getLine
let line' = reverse line
putStrLn $ "You said " ++ line' ++ " backwards!" 
        putStrLn $ "Yes, you said " ++ line' ++ " backwards!"
main = do line <- fmap reverse getLine
putStrLn $ "You said " ++ line ++ " backwards!"
putStrLn $ "Yes, you really said " ++ line ++ " backwards!"
ファンクターとしての関数
•  (->) r もファンクター
– え?
•  r -> a は (->) r a とも書ける
– (->) は2つの型をとる型コンストラクタと⾒見見ることができ
る。
– よって、部分適⽤用して、(->) r はファンクターになれる。
ファンクターとしての関数
fmap :: (a -> b) -> f a -> f b
f は  (->) r
fmap :: (a -> b) -> ((->) r a) -> ((->) r b)
中置表記に直して
fmap :: (a -> b) -> (r -> a) -> (r -> b)
r -> a の出⼒力力を a -> b につなぐ
b . r $ a
ぶっちゃけこれって
ファンクターとしての関数の実例例
•  関数ファンクターの定義は  
Control.Monad.Instances にあるのでためそう。
– 232ページ
関数の持ち上げ(lifting)
•  カリー化を再度度考えてみる
– a -> b -> c
– a 型を引数にとって (b -> c)  型を返す  ともとれる
•  この⾒見見⽅方で  fmap をみると
(a -> b) -> f a -> f b は
(a -> b) -> (f a -> f b) ともみることができる。
•  このような操作を「関数の持ち上げ」という。
– ようは部分適⽤用のみかたを変えてみたってことで理理解
あってますかね?
関数の持ち上げ(lifting) の例例
•  部分適⽤用して名前つけたらわかりやすい
– ちなみに例例がインパクトありすぎて原著あたったけど、
これは⽇日本語版のみらしい。
ghci> :set -XNoMonomorphismRestriction 
ghci> let shout = fmap (++"!")
ghci> :t shout
shout :: Functor f => f [Char] -> f [Char] 
ghci> shout ["ha","ka","ta","no"]
["ha!","ka!","ta!","no!"]
f a -> f b になったことがわかる
ファンクター則
•  ファンクターは2つの性質を満たす必要がある
•  第1法則
–  id でファンクター値を写したら、ファンクター値は変化しない
•  第2法則
–  「f と g の合成関数でファンクター値を写したもの」と、
「まず  g、次に  f でファンクター値を写したもの」が等しい
–  fmap (f . g) x = fmap f (fmap g x)  が
必ず成り⽴立立つこと
•  Haskell ではこれらが成り⽴立立つかチェックされないので、
ファンクター則が成り⽴立立たない Functor を作れてしまう。
–  ⾃自分でテストする必要がある。
–  もちろん標準の Functor 派⽣生型クラスは全部満たしてる。
ファンクター第1法則をもう少し⾒見見てみる
•  Just で考える
– id は引数をそのまま返す関数
– Nothing だった場合は Nothing になる。
– Just x が⼊入った場合
fmap id (Just x)
Just (id x)
Just x
Just x は変化していない
法則を破っちゃう例例
•  法則を破っている  CMaybe 型を定義する
•  fmap の戻り値の counter を、fmap にかけると + 1
される実装になっている
–  f を id にしたら、前後で値が変わってしまう
CJust counter x → CJust (counter + 1) x
•  第1法則を満たさない
•  ファンクター則を満たさないファンクターはバグを⽣生む
–  ファンクターであることを信じて使ったらえらい⽬目に合う。
data CMaybe a = CNothing | CJust Int a deriving (Show)
instance Functor CMaybe where
    fmap f CNothing = CNothing
    fmap f (CJust counter x) = CJust (counter+1) (f x)
アプリカティブファンクター (1)
•  fmap の f に2引数関数を突っ込むと、
ファンクター値の中に関数が⼊入ったものができる。
ghci> :t fmap (++) (Just "hey")
fmap (++) (Just "hey") :: Maybe ([Char] -> [Char])
ghci> :t fmap compare (Just 'a')
fmap compare (Just 'a') :: Maybe (Char -> Ordering) 
ghci> :t fmap compare "A LIST OF CHARS"
fmap compare "A LIST OF CHARS" :: [Char -> Ordering] 
ghci>:t fmap(x y z -> x + y / z)[3,4,5,6]
fmap (x y z -> x + y / z) [3,4,5,6] :: (Fractional a) => [a -> a -> a]
アプリカティブファンクター (2)
•  使い⽅方としては、ファンクター値の中の関数を
引数にとる関数に、fmap すること。
•  このアプローチでは限界がある
– Just (3 *) の中の関数を Just 5 に対して適⽤用して、
Just 15 にすることはできない。
ghci> let a = fmap (*) [1,2,3,4] 
ghci> :t a
a :: [Integer -> Integer] 
ghci> fmap (f -> f 9 ) a 
[9,18,27,36]
ghci> fmap ($9) a [9,18,27,36]
アプリカティブファンクター (3)
•  そこで登場する  Control.Applicative
•  pure の f がアプリカティブファンクターとなるもの
–  アプリカティブ値という
•  <*> がさっきの Just 15 を解決できる関数
–  関数の⼊入ったファンクター値 と
値の⼊入ったファンクター値 を引数にとって、
値に関数を適⽤用したファンクター値 を返す。
•  そしてもれなく  Functor でもあるので  fmap も使える
class (Functor f) => Applicative f where 
pure:: a -> f a 
(<*>) :: f (a -> b) -> f a -> f b
Maybeはアプリカティブファンクター
•  Maybe の Applicative インスタンスをみてみる
–  Hoogle でみたらなんか違うことになってるので後で解決したい
•  pure (アプリカティブ値) は Just
•  「関数の⼊入ったファンクター」として  Nothing を
渡したら Nothing
•  「関数の⼊入ったファンクター」に Just f を渡すと、
第2引数に  fmap f する
–  第2引数もファンクター値なので、fmap の第2引数にそのまま
渡せる
instance Applicative Maybe where 
pure = Just
Nothing <*> _ = Nothing
(Just f) <*> something = fmap f something
Maybeを試す
•  Maybe の <*> を試してみる
•  Just = pure になっているが、アプリカティブとして
使うときにとどめたほうがよい。
ghci> Just (+3) <*> Just 9 
Just 12
ghci> pure (+3) <*> Just 10 
Just 13
ghci> pure (+3) <*> Just 9
Just 12
ghci> Just (++"hahah") <*> Nothing
Nothing
ghci> Nothing <*> Just "woot" 
Nothing
fmap (+3) (Just 9)
fmap (+3) (Just 10)
fmap (+3) (Just 9)
fmap (++"hahah") Nothing
fmap Nothing (Just "woot")
アプリカティブ・スタイル
•  <*> の重ねがけ
– 左結合します
pure (+) <*> Just 3 <*> Just 5
Just ((+) 3) <*> Just 5
Just ((+) 3 5)
Just 8
pure f <*> x = fmap f x = f <$> x
•  pure f <*> x は  fmap f x と同じ
•  なので、pure f <*> x <*> y … は
fmap f x <*> y … ともかける。
•  よく使うので、Control.Applicative に、
fmap f x を  f <$> x と書けるよう
定義してくれている。
ghci> (++) <$> Just "johntra" <*> Just "volta" 
Just "johntravolta"
リストもアプリカティブ
•  リストも Applicative のインスタンスがある
– pure は値を持てる最⼩小の⽂文脈なので、
1要素のリストとなる。
instance Applicative [] where 
pure x = [x]
fs <*> xs = [f x | f <- fs, x <- xs]
リストのアプリカティブを使う
•  <*> をつかうと map の重ねがけがきれいに!
[(+),(*)] <*> [1,2] <*> [3,4]
[(1+), (2+), (1*), (2*)] <*> [3,4]
[(1+3), (1+4), (2+3), (2+4), (1*3), (1*4), (2*3), (2*4)]
[4, 5, 5, 6, 3, 4, 6, 8]
リスト内包表記をアプリカティブスタイルで
•  アプリカティブスタイルを使うと、
リスト内包表記を置き換えられることが多々ある。
ghci> [ x * y | x <- [2,5,10], y <- [8,10,11]] 
[16,20,22,40,50,55,80,100,110]
ghci> (*) <$> [2,5,10] <*> [8,10,11] 
[16,20,22,40,50,55,80,100,110]
IOもアプリカティブファンクター
•  IOも Applicative のインスタンスがある
instance Applicative IO where 
pure = return
a <*> b= do 
f <- a
x <- b 
return (f x)
IOの<*>を使ってみる
myAction :: IO String 
myAction = do
a <- getLine
b <- getLine 
return $ a ++ b
myAction :: IO String
myAction = (++) <$> getLine <*> getLine
関数もアプリカティブ
•  関数だって Applicative のインスタンスがある
•  pure は引数をそのまま返す関数 (idと同じ?)
•  <*> の実装が呪⽂文っぽいけど、気にしなくてOK
– アプリカティブに使えるということを認識識することが重要
instance Applicative ((->) r) where
pure x = (_ -> x)
f <*> g= x -> f x (g x)
関数をアプリカティブとして使う
ghci> :t (+) <$> (+3) <*> (*100) 
(+) <$> (+3) <*> (*100) :: (Num a) => a -> a 
ghci> (+) <$> (+3) <*> (*100) $ 5
508
ZipList
•  [(+3),(*2)] <*> [1,2] ってやったら  
[3+1, 3+2, 2*1, 2*2] として [4,5,2,4] じゃなくて
[1+3, 2*2] として  [4, 4] となってほしい
•  そこで登場するのが  ZipList
– 当然これもアプリカティブです
instance Applicative ZipList where 
pure x = ZipList (repeat x)
ZipList fs <*> ZipList xs = ZipList (zipWith (f x -> f x) fs xs
ZipListを使ってみる
•  ZipListはShowをサポートしていないので、
getZipListを使って⽣生のリストを得る必要がある。
ghci> getZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [100,100,100] 
[101,102,103]
ghci> getZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [100,100..] 
[101,102,103]
ghci> getZipList $ max <$> ZipList [1,2,3,4,5,3] <*> ZipList [5,3,1,2] 
[5,3,3,4]
ghci> getZipList $ (,,) <$> ZipList "dog" <*> ZipList "cat" <*> ZipList "rat"
[('d','c','r'),('o','a','a'),('g','t','t')]
アプリカティブ則
•  アプリカティブファンクターは以下の法則を持つ
–  pure f <*> x = fmap f x
–  pure id <*> v = v
–  pure (.) <*> u <*> v <*> w = u <*> (v <*> w) 
–  pure f <*> pure x = pure (f x)
–  u <*> pure y = pure ($ y) <*> u
•  特に  pure f <*> x = fmap f x は重要
まとめ
•  雰囲気はつかめたものの、まだちゃんと理理解できて
ない。
•  アプリカティブスタイルすごく便便利利そう。
– 実際にはどういう活⽤用をするのか調べてみたい。

Weitere ähnliche Inhalte

Was ist angesagt?

すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章aomori ringo
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)karky7
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)Satoshi Yamada
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5Takinami Kei
 
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6risou
 
Van laarhoven lens
Van laarhoven lensVan laarhoven lens
Van laarhoven lensNaoki Aoyama
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020Fujio Kojima
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会Takinami Kei
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psqlToshi Harada
 

Was ist angesagt? (20)

初めてのSTL
初めてのSTL初めてのSTL
初めてのSTL
 
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)
 
Find(1)
Find(1)Find(1)
Find(1)
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
 
  
 
 
F#のすすめ
F#のすすめF#のすすめ
F#のすすめ
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
 
Van laarhoven lens
Van laarhoven lensVan laarhoven lens
Van laarhoven lens
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 

Ähnlich wie すごいHaskell読書会#10

関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
Extensible Eff Applicative
Extensible Eff ApplicativeExtensible Eff Applicative
Extensible Eff ApplicativeSanshiro Yoshida
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsHiromi Ishii
 
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)Nozomu Kaneko
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25Nobuaki Oshiro
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
Adding simpl GVN path into GHC
Adding simpl GVN path into GHCAdding simpl GVN path into GHC
Adding simpl GVN path into GHCKei Hibino
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Shintaro Fukushima
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPIDaisuke Igarashi
 
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルJava SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルなおき きしだ
 
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)Yoichi Nakayama
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式digitalghost
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたいt-sin
 

Ähnlich wie すごいHaskell読書会#10 (20)

関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
Extensible Eff Applicative
Extensible Eff ApplicativeExtensible Eff Applicative
Extensible Eff Applicative
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
Haskell Lecture 2
Haskell Lecture 2Haskell Lecture 2
Haskell Lecture 2
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible Effects
 
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
Adding simpl GVN path into GHC
Adding simpl GVN path into GHCAdding simpl GVN path into GHC
Adding simpl GVN path into GHC
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルJava SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
 
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 

Mehr von Shin Ise

Cross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCrossCross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCrossShin Ise
 
いまどきのiOSプログラミング with Xcode5
いまどきのiOSプログラミング with Xcode5いまどきのiOSプログラミング with Xcode5
いまどきのiOSプログラミング with Xcode5Shin Ise
 
すまべんLite@関西#4
すまべんLite@関西#4すまべんLite@関西#4
すまべんLite@関西#4Shin Ise
 
すまべんLite@関西#3
すまべんLite@関西#3すまべんLite@関西#3
すまべんLite@関西#3Shin Ise
 
すまべんLite@関西#2
すまべんLite@関西#2すまべんLite@関西#2
すまべんLite@関西#2Shin Ise
 
音声APIを使ってみる
音声APIを使ってみる音声APIを使ってみる
音声APIを使ってみるShin Ise
 
すまべんLite@関西#1
すまべんLite@関西#1すまべんLite@関西#1
すまべんLite@関西#1Shin Ise
 
Xamarin2.0であそぼう
Xamarin2.0であそぼうXamarin2.0であそぼう
Xamarin2.0であそぼうShin Ise
 
CoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスCoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスShin Ise
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」Shin Ise
 
GridViewのつかいかた
GridViewのつかいかたGridViewのつかいかた
GridViewのつかいかたShin Ise
 
iOSのVoiceOver対応開発 Rev2
iOSのVoiceOver対応開発 Rev2iOSのVoiceOver対応開発 Rev2
iOSのVoiceOver対応開発 Rev2Shin Ise
 
MediaLibrary で あそぼう
MediaLibrary で あそぼうMediaLibrary で あそぼう
MediaLibrary で あそぼうShin Ise
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
本当は怖いSilverlight for Windows Phone Toolkit
本当は怖いSilverlight for Windows Phone Toolkit本当は怖いSilverlight for Windows Phone Toolkit
本当は怖いSilverlight for Windows Phone ToolkitShin Ise
 
Socketプログラム Silverlight for Windows Phoneへの移植のポイント
Socketプログラム Silverlight for Windows Phoneへの移植のポイントSocketプログラム Silverlight for Windows Phoneへの移植のポイント
Socketプログラム Silverlight for Windows Phoneへの移植のポイントShin Ise
 
Macで使うWindows Phone 7
Macで使うWindows Phone 7Macで使うWindows Phone 7
Macで使うWindows Phone 7Shin Ise
 
iOSのVoiceOver対応開発
iOSのVoiceOver対応開発iOSのVoiceOver対応開発
iOSのVoiceOver対応開発Shin Ise
 
Galaxy tab で持ち歩くモバイルサーバー
Galaxy tab で持ち歩くモバイルサーバーGalaxy tab で持ち歩くモバイルサーバー
Galaxy tab で持ち歩くモバイルサーバーShin Ise
 
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作るハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作るShin Ise
 

Mehr von Shin Ise (20)

Cross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCrossCross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCross
 
いまどきのiOSプログラミング with Xcode5
いまどきのiOSプログラミング with Xcode5いまどきのiOSプログラミング with Xcode5
いまどきのiOSプログラミング with Xcode5
 
すまべんLite@関西#4
すまべんLite@関西#4すまべんLite@関西#4
すまべんLite@関西#4
 
すまべんLite@関西#3
すまべんLite@関西#3すまべんLite@関西#3
すまべんLite@関西#3
 
すまべんLite@関西#2
すまべんLite@関西#2すまべんLite@関西#2
すまべんLite@関西#2
 
音声APIを使ってみる
音声APIを使ってみる音声APIを使ってみる
音声APIを使ってみる
 
すまべんLite@関西#1
すまべんLite@関西#1すまべんLite@関西#1
すまべんLite@関西#1
 
Xamarin2.0であそぼう
Xamarin2.0であそぼうXamarin2.0であそぼう
Xamarin2.0であそぼう
 
CoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスCoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low Energyデバイス
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
 
GridViewのつかいかた
GridViewのつかいかたGridViewのつかいかた
GridViewのつかいかた
 
iOSのVoiceOver対応開発 Rev2
iOSのVoiceOver対応開発 Rev2iOSのVoiceOver対応開発 Rev2
iOSのVoiceOver対応開発 Rev2
 
MediaLibrary で あそぼう
MediaLibrary で あそぼうMediaLibrary で あそぼう
MediaLibrary で あそぼう
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
本当は怖いSilverlight for Windows Phone Toolkit
本当は怖いSilverlight for Windows Phone Toolkit本当は怖いSilverlight for Windows Phone Toolkit
本当は怖いSilverlight for Windows Phone Toolkit
 
Socketプログラム Silverlight for Windows Phoneへの移植のポイント
Socketプログラム Silverlight for Windows Phoneへの移植のポイントSocketプログラム Silverlight for Windows Phoneへの移植のポイント
Socketプログラム Silverlight for Windows Phoneへの移植のポイント
 
Macで使うWindows Phone 7
Macで使うWindows Phone 7Macで使うWindows Phone 7
Macで使うWindows Phone 7
 
iOSのVoiceOver対応開発
iOSのVoiceOver対応開発iOSのVoiceOver対応開発
iOSのVoiceOver対応開発
 
Galaxy tab で持ち歩くモバイルサーバー
Galaxy tab で持ち歩くモバイルサーバーGalaxy tab で持ち歩くモバイルサーバー
Galaxy tab で持ち歩くモバイルサーバー
 
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作るハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
 

すごいHaskell読書会#10