ebook img

Causal Commutative Arrows - theV.net PDF

44 Pages·2009·0.41 MB·English
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Causal Commutative Arrows - theV.net

Causal Commutative Arrows Hai (Paul) Liu, Eric Cheng, and Paul Hudak Computer Science Department Yale University The 14th ACM SIGPLAN ICFP 2009 Example A mathematical definition of the exponential function: (cid:90) t e(t) = 1 + e(t) · dt 0 FRP program using arrow syntax (Paterson, 2001): exp = proc () → do rec let e = 1 + i i ← integral−≺ e returnA−≺ e Functional Reactive Programming Computations about time-varying quantities. Signal α ≈ Time → α Yampa (Hudak, et. al. 2002) is a version of FRP using the arrow framework (Hughes, 2000). Arrows provide: Abstract computation over signals. (cid:73) SF α β ≈ Signal α → Signal β A small set of wiring combinators. (cid:73) Mathematical background in category theory. (cid:73) What is Arrow A generalization of monads. In Haskell: class Arrow a where arr :: (b → c) → a b c (≫) :: a b c → a c d → a b d first :: a b c → a (b, d) (c, d) Support both sequential and parallel composition: second :: (Arrow a) ⇒ a b c → a (d, b) (d, c) second f = arr swap ≫ first f ≫ arr swap where swap (a, b) = (b, a) (???) :: (Arrow a) ⇒ a b c → a b0 c0 → a (b, b0) (c, c0) f ??? g = first f ≫ second g Picturing an Arrow (a) arr f (b) f ≫ g (c) first f (d) f ??? g (e) loop f To model recursion, Paterson (2001) introduces ArrowLoop: class Arrow a ⇒ ArrowLoop a where loop :: a (b, d) (c, d) → a b c Arrows and FRP Why do we need Arrows? Modular, both input and output are explicit. (cid:73) Eliminates a form of time and space leak (Liu and Hudak, 2007). (cid:73) Abstract, with properties described by arrow laws. (cid:73) Arrow Laws left identity arr id ≫ f = f right identity f ≫ arr id = f associativity (f ≫ g) ≫ h = f ≫ (g ≫ h) composition arr (g . f ) = arr f ≫ arr g extension first (arr f ) = arr (f × id) functor first (f ≫ g) = first f ≫ first g exchange first f ≫ arr (id × g) = arr (id × g) ≫ first f unit first f ≫ arr fst = arr fst ≫ f association first (first f ) ≫ arr assoc = arr assoc ≫ first f where assoc ((a, b), c) = (a, (b, c)) Arrow Loop Laws left tightening loop (first h ≫ f ) = h ≫ loop f right tightening loop (f ≫ first h) = loop f ≫ h sliding loop (f ≫ arr (id ∗ k)) = loop (arr (id × k) ≫ f ) vanishing loop (loop f ) = loop (arr assoc−1 ≫ f ≫ arr assoc) superposing second (loop f ) = loop (arr assoc ≫ second f ≫ arr assoc−1) extension loop (arr f ) = arr (trace f ) where trace f b = let (c, d) = f (b, d) in c Question What makes a good abstraction for FRP? Question What makes a good abstraction for FRP? Arrows?

Description:
arrow arr f, or loopB i (arr g), such that ⊣ enorm : α β and [[e]] = [[enorm]]. loopB i f . Compiler fuses all into a tail recursive loop, unboxing types if possible.
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.