Functional ReactiveProgramming (FRP) with reactive-banana-0.6.0.0        Heinrich Apfelmus          Translated by Akira Ta...
Functional ReactiveProgramming (FRP) with reactive-banana-0.6.0.0        Heinrich Apfelmus          Translated by Akira Ta...
Why?    Functional Ractive Programmingは、命令的プログラムを実    装するエレガントな手法である•   GUI•   アニメーション•   デジタルミュージック•   ロボット
How?          ファーストクラスの値としての時間変化       type Behavior a = Time -> a       type Event a    = [(Time, a)]鍵となるデータ型BehaviorとEve...
Behavior (振る舞い)             type Behavior a = Time -> a Value (値)                                •   位置 – アニメーション         ...
Behavior API      instance Functor Behavior               Functor      instance Applicative Behavior           Applicative...
Behavior API     (<$>) :: (a -> b)                   Functor           -> Behavior a -> Behavior b     pure :: a -> Behavi...
Behavior API Double 1        a                        b 0            Time (時間)                  Time (時間)               (*...
Event             type Event a = [(Time, a)] Value (値)                                • マウスクリック – GUI                     ...
Event API     Instance Functor Event              Functor     never     :: Event a                  List     unionWith :: ...
Event API             x                     filterE (>5) x    Int                      Int                 Time (時間)      ...
Event & Behavior API     (<@>) :: Behavior (a -> b)           -> Event a -> Event b                                       ...
Event & Behavior API                            ()                                 e      b                Time           ...
Frameworks (GUI, ...)                      data NetworkDesctiption t a      fromAddHandler                      Eventのインポー...
Upcoming SlideShare
Loading in...5
×

frp tutorial

2,504

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,504
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

frp tutorial

  1. 1. Functional ReactiveProgramming (FRP) with reactive-banana-0.6.0.0 Heinrich Apfelmus Translated by Akira Takahashi (faithandbrave@gmail.com)
  2. 2. Functional ReactiveProgramming (FRP) with reactive-banana-0.6.0.0 Heinrich Apfelmus Translated by Akira Takahashi (faithandbrave@gmail.com)
  3. 3. Why? Functional Ractive Programmingは、命令的プログラムを実 装するエレガントな手法である• GUI• アニメーション• デジタルミュージック• ロボット
  4. 4. How? ファーストクラスの値としての時間変化 type Behavior a = Time -> a type Event a = [(Time, a)]鍵となるデータ型BehaviorとEvent。Behavior(振る舞い)は、「時間とともに変化する値」に対応するEvent(イベント)は、「特定の時間で呼び出されたイベント」に対応する。これらを理解する方法を説明するつもりだ。もちろん、実際の実装は抽象的である。
  5. 5. Behavior (振る舞い) type Behavior a = Time -> a Value (値) • 位置 – アニメーション • テキスト値 – GUI • ボリューム – 音楽 • 物理量 𝑡2 𝑦 𝑡 = 𝑦0 + 𝑦0𝑡 − 𝑔 2 Time (時間)Behaviorは時間の各ポイントに値を関連付ける。
  6. 6. Behavior API instance Functor Behavior Functor instance Applicative Behavior ApplicativeどのようにしてプログラムでBehaviorを使用するか?Behavior用のAPIは、実際にはとても簡単: それらはapplicative functorである。
  7. 7. Behavior API (<$>) :: (a -> b) Functor -> Behavior a -> Behavior b pure :: a -> Behavior a (<*>) :: Behavior (a -> b) Applicative -> Behavior a -> Behavior b bf <*> bx = 時間の各ポイント ¥time -> bf time $ bx timeFunctorとApplicativeに関連付けられた関数に対するリマインダ。最も重要な機能は「apply(適用)」と呼ばれ、単に時間の各ポイントで時間変化の値に時間変化の関数を適用する<*>演算子である。pure(純粋)な関数で、ある時間における一定の値を構築する
  8. 8. Behavior API Double 1 a b 0 Time (時間) Time (時間) (*) <$> a <*> b Time (時間)タスクの例: 振動を減衰させる。
  9. 9. Event type Event a = [(Time, a)] Value (値) • マウスクリック – GUI • 楽譜 – 音楽 • 衝突 – 物理 Time (時間)Eventは、特定のポイントで「発生」する値のコレクションである。発生は、同時に起こる可能性があり、最新のreactive-banana 0.6ではイベントの参照もできる。
  10. 10. Event API Instance Functor Event Functor never :: Event a List unionWith :: (a -> a -> a) [] -> Event a -> Event a -> Event a zipWith filterE :: (a -> Bool) filter -> Event a -> Event a accumE :: a -> Event (a -> a) scanl -> Event aどのようにしてプログラムでEventを使用するか?Event APIはもう少し手がこんていますが、リスト操作に密接に関係している。
  11. 11. Event API x filterE (>5) x Int Int Time (時間) Time (時間)例: filterE
  12. 12. Event & Behavior API (<@>) :: Behavior (a -> b) -> Event a -> Event b 「apply」 (<@) :: Behavior b -> Event a -> Event b<@>演算子は「apply(適用)」と呼ばれ、イベントが発生する時系列関数を適用する。その弟である<@は、Behaviorから値を持つEventをタグ付けする。これはData.Functorの<$演算子に似ている。
  13. 13. Event & Behavior API () e b Time Time b <@ e Time<@演算子の可視化
  14. 14. Frameworks (GUI, ...) data NetworkDesctiption t a fromAddHandler Eventのインポート fromPoll Behaviorのインポート reactimate Eventのエクスポート changes BehaviorからEventを取得これまで説明したAPIは、既存のEventとBehaviorを新しいものに結合できるが、最初の場所ではそれらを取得する方法を教えてはくれない。そのため、wxHaskellのような外部フレームワークをバインドする必要がある。Reactive.Banana.FrameworksのNetworkDescriptionモナドはこれができる。これはそれほど興味深いモナドではない。これは単なるdevice for bookkeepingで、いくつかの種類のシンタックスシュガーを使うことをお勧めする。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×