Slide 1

Slide 1 text

Implementing Functional Reactive Programming in

Slide 2

Slide 2 text

Remember this?

Slide 3

Slide 3 text

Behaviour[T] = Time => T

Slide 4

Slide 4 text

Event[T] = Stream[(Time, T)]

Slide 5

Slide 5 text

Lets use them...

Slide 6

Slide 6 text

val beh = new Behaviour(time => Color.red)

Slide 7

Slide 7 text

beh.at(now)

Slide 8

Slide 8 text

beh.at(now) def now = System.currentTimeMillis

Slide 9

Slide 9 text

beh.map(val => val.toString)

Slide 10

Slide 10 text

val event = new Event[Boolean]

Slide 11

Slide 11 text

beh.until(event, beh1)

Slide 12

Slide 12 text

“Hi!”.toggle(event, “Bye!”)

Slide 13

Slide 13 text

“Hi!”.toggle(event, “Bye!”) ?

Slide 14

Slide 14 text

implicit def lift[T](value : T) = { new Behaviour(time => value) }

Slide 15

Slide 15 text

implicit def lift[T](value : T) = { new Behaviour(time => value) }

Slide 16

Slide 16 text

So Far:

Slide 17

Slide 17 text

So Far: - Core FRP: Behaviour/Event

Slide 18

Slide 18 text

So Far: - Core FRP: Behaviour/Event - UI Framework

Slide 19

Slide 19 text

So Far: - Core FRP: Behaviour/Event - UI Framework - I/O Framework

Slide 20

Slide 20 text

Everything: http://github.com/oetzi/echo

Slide 21

Slide 21 text

An example...

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

val playButton = Button(button => "Play".toggle(button.click, "Pause"))

Slide 24

Slide 24 text

val slider = Slider()

Slide 25

Slide 25 text

val playing = false.toggle(playButton.click, true) val song = new Song(file, playing, slider.value)

Slide 26

Slide 26 text

val anim = song.volume.map1(width) { (v, w) => math.min(v * (w / 50F), w) } val bouncer = Block(anim, height - 70, Color.green)

Slide 27

Slide 27 text

val frame = Frame(width, height, List( bouncer, slider, playButton ))

Slide 28

Slide 28 text

What if something goes wrong?

Slide 29

Slide 29 text

class Dangerous extends Breakable { dangerous { () => break_everything() } }

Slide 30

Slide 30 text

class Dangerous extends Breakable { dangerous { () => break_everything() } } val danger = new Dangerous() val err : Event[Exception] = danger.errors

Slide 31

Slide 31 text

DOING IT LIVE

Slide 32

Slide 32 text

Thank You!