30
Functional Reactive Programming Maximilian Krome Specification Languages for Verification Maximilian Krome SPLAV 1/30

Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Functional Reactive Programming

Maximilian Krome

Specification Languages for Verification

Maximilian Krome SPLAV 1/30

Page 2: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Mathematical Roots

I Formal mathematical descriptionI ProvabilityI ”What” versus ”How”

Maximilian Krome SPLAV 2/30

Page 3: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Concepts of Functional Programming

I Referential Transparency (No reassignment)I Purity (No side effects)I First Class or Higher Order FunctionsI Recursion

Maximilian Krome SPLAV 3/30

Page 4: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Functional Programming Example

Quicksort

qsor t : : ( Ord a ) => [ a ] −> [ a ]qso r t [ ] = [ ]qso r t ( x : xs ) = qsor t less ++ [ x ] ++ qsor t more

where l ess = f i l t e r (<x ) xsmore = f i l t e r (>=x ) xs

Maximilian Krome SPLAV 4/30

Page 5: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Side Effects

So:Side effects are against theprogramming paradigm.

But:Side effects are required for aprogram to interact with itsenvironment or users.

Maximilian Krome SPLAV 5/30

Page 6: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Functional Reactive Animation

I Authors: Paul Hudak and Conal ElliottI First appearance: International Conference of Functional

Programming 1997I Purpose: Creation of (interactive) animationI Signals: Behaviours and Events; both first classI Implementation: Embedded in Haskell, running on HUGS

(Haskell User Gofer System)

Maximilian Krome SPLAV 6/30

Page 7: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Features

I Time: Is a BehaviourI liftn : Maps n signals to one other via a function parameterI timeTransform: Accelerates/Delays behavioursI integrate: Integrates a numeric behaviourI untilB: Switching of signals

Maximilian Krome SPLAV 7/30

Page 8: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Reactivity

Red-Green-Cycle

co lo rCyc le t0 = red ’ untilB ’ lbp t0 ∗=>\ t1 −> green ’ untilB ’ l bp t1 ∗=>\ t2 −> co lo rCyc le t2

Maximilian Krome SPLAV 8/30

Page 9: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Integration

Mouse-Follower

fol lowMouseRate im t0 = move o f f s e t imwhere o f f s e t = i n t e g r a l ra te t0

ra te = mouse t0 .− . pospos = o r i g i n 2 . + ˆ o f f s e t

s(t) =∫

v(t)dt + s0

Maximilian Krome SPLAV 9/30

Page 10: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Behaviour attempts

1. data Behavior a = Behavior ( Time −> a )

Not efficient enough

2. data Behavior a = Behavior( Time −> ( a , Behavior a ) )

Sampling produces (simplified) new behaviour

3. data Behavior a = Behavior( Time −> ( a , Behavior a ) )( l v l Time −> ( l v l a , Behavior a ) )

Maximilian Krome SPLAV 10/30

Page 11: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Predicate

predicate ( time ∗ exp (4 ∗ time ) ==∗ 10) 0

Evaluates to true at an infinitely small time span

Maximilian Krome SPLAV 11/30

Page 12: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Interval Analysis

Remember:

( l v l Time −> ( l v l a , Behavior a ) )

returns an interval of values the behaviour assumes in a certaintime span.

Maximilian Krome SPLAV 12/30

Page 13: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Haskell is lazy

Only computes when the result is required

AdvantagesI infinite data structuresI Spares unnecessary

computation

DisadvantagesI time and space leaksI Hard to predict resource

requirements

Maximilian Krome SPLAV 13/30

Page 14: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Real Time FRP

I Authors: Zhanyong Wan, Walid Taha and Paul HudakI Purpose: Real Time ApplicationsI Implementation: As Intermediate Language

Maximilian Krome SPLAV 14/30

Page 15: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Properties for Real Time Development

I statically typed and type preservingI signals are not first classI bounded FRP term sizeI constant time and space requirements for FRP commands

Maximilian Krome SPLAV 15/30

Page 16: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Features

1. ext is equivalent to lift0 .2. let signal x = s1 in s2 allows to access the current value

of the first signal in an ext term forming the second signal3. delay v s delays a signal by one tick. It displays v in the

first tick.4. s1 switch on x = ev in s2 switches from s1 to s2 whenever

event ev occurs. Starts out as s1.

Maximilian Krome SPLAV 16/30

Page 17: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Syntax

Definition

e ::=x |c|()|(e1, e2)|e⊥| ⊥ |λx .e|e1 e2|fix x .e

v ::=c|()|(v1, v2)|v⊥| ⊥ |λx .e

s,ev ::=input |time|ext e|delay v s|let signal x = s1 in s2|s1 switch on x = ev in s

Maximilian Krome SPLAV 17/30

Page 18: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Compiling FRP into RT-FRP

Liftlift1 e s ≡

l e t signal x = s in ext ( e x )

lift2 e s1 s2 ≡

l e t signal x1 = s2 inl e t signal x2 = s2 in ext ( e x1 x2 )

Maximilian Krome SPLAV 18/30

Page 19: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Elm

I Author: Evan CzaplickiI Purpose: GUIs for Web applicationsI Implementation: Compiles into an intermediate language

and then into JavaScript

Maximilian Krome SPLAV 19/30

Page 20: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Improvements over classic FRP

Classic FRPI Continuous

SignalsI Strict Event

Ordering

ResultingProblems

I NeedlessRecomputation

I Global Delays

SolutionsI Only discrete

SignalsI MemoizationI non Strict Event

Ordering

Maximilian Krome SPLAV 20/30

Page 21: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Features

1. lift : Self explanatory2. async: Marks independent code3. foldp: It takes the current value of signal s and the

accumulator a and feeds them to the function f. The resultthen replaces the accumulator. foldp f a s itself evaluatesto a signal that contains all accumulator values.

Maximilian Krome SPLAV 21/30

Page 22: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Syntax

Definition

e ::=()|n|x |λx : η.e|e1 e2|e1 ⊕ e2|if e1 e2 e3|let x = e1 in e2|i |liftn e e1 , . . . en|foldp e1 e2 e3|async e

τ ::=unit |int |τ → τ ′

σ ::=signalτ |τ → σ|σ → σ′

η ::=τ |σ

Maximilian Krome SPLAV 22/30

Page 23: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Signals of Signals

l i f t ( foldp (+ ) 0) s igna lOfS igna ls

Evaluating < <1,2,3,4,...>, <5,6,7,8,...>, ...>

Remembering Everything<<1,3,6,10,...>,<5,11,18,26,...>, ...>

Evaluation only from thecurrent time on<<1,3>, <7, 15,...>, ...>

Maximilian Krome SPLAV 23/30

Page 24: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Graph representation

Figure: Program graph

Maximilian Krome SPLAV 24/30

Page 25: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Automaton

Definition

data Automaton a b =Step ( a −> ( Automaton a b , b ) )

Maximilian Krome SPLAV 25/30

Page 26: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Functions on Automatons

step : a −> Automaton a b−> ( Automaton a b , b )

step inpu t ( Step f ) = f i npu t

run : Automaton a b −> b−> Signa l a −> Signa l b

run automaton base inpu ts =l e t step ’ i npu t ( Step f , ) = f i npu tin l i f t snd ( f o l dp step ’ ( automaton ,

base ) i npu ts )

Maximilian Krome SPLAV 26/30

Page 27: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

”A Farewell to FRP”

Making signals unnecessary with The Elm ArchitectureI Signals are hard to understandI Signals are not used that much

Posted at the official website of Elm

Maximilian Krome SPLAV 27/30

Page 28: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

Conclusion

Ideas of FRP are useful and it is flexible enough to suit a varietyof applications, each approach to a different domain treatssignals differently:

I Fran: First class behaviours and eventsI RT-FRP: Only behavioursI Elm: Only events

Event processing is key to most GUI frameworks

Maximilian Krome SPLAV 28/30

Page 29: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

References I

J. Backus.Can programming be liberated from the von neumannstyle?: A functional style and its algebra of programs.Commun. ACM, 21(8):613–641, Aug. 1978.

C. Elliott and P. Hudak.Functional reactive animation.In International Conference on Functional Programming,pages 163–173, June 1997.

M. Lipovaca.

J. M. Synder.

Maximilian Krome SPLAV 29/30

Page 30: Functional Reactive Programming · Functional Reactive Animation I Authors: Paul Hudak and Conal Elliott I First appearance: International Conference of Functional Programming 1997

References II

Z. Wan, W. Taha, and P. Hudak.Real-time FRP.In International Conference on Functional Programming(ICFP’01), 2001.

Maximilian Krome SPLAV 30/30