Slides for Graphical User Interfaces in Haskell
-
Upload
gideon-sireling -
Category
Technology
-
view
193 -
download
0
Transcript of Slides for Graphical User Interfaces in Haskell
![Page 1: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/1.jpg)
Graphical User Interfaces in Haskell
By Gideon Sireling
August 2011
![Page 2: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/2.jpg)
Introduction Literature Review Analysis Aims Design Packaging Testing Conclusions Evaluation Future Work
![Page 3: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/3.jpg)
Imperative vs. Functional
Haskell: Purely functional
Line-of-Business vs. Academia and Financials
New Challenges ◦ Parallelism
◦ Correctness
Graphical User Interfaces
![Page 4: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/4.jpg)
Haskell
IO Monad
Toolkits ◦ Gtk2Hs
◦ WxHaskell
◦ QtHaskell
Functional Reactive Programming ◦ Events
◦ Behaviours
◦ Reactive Behaviour
![Page 5: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/5.jpg)
Imperative Toolkits vs. Declarative FRP
Wherefore art thou FRP?
Autonomous Components vs. Global State
Domain-Specific Abstractions
IO Monad as Glue
![Page 6: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/6.jpg)
Data Binding ◦ One Way
◦ Two Way
Reuse the Wheel
Small, Simple API
Back to the IO Monad
![Page 7: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/7.jpg)
Variable Interface class Variable v where
newVar :: a -> IO (v a)
readVar :: v a -> IO a
writeVar :: v a -> a -> IO ()
Bindings data Binding a = Binding (a -> d) t (t -> d -> IO ())
Simple Data Sources data Source v a = Source {bindings :: v [Binding a], var :: v a}
Binding Lists data BindingList v a = BindingList {source :: Source v a
,list :: v [v a]
,pos :: v Int}
Binding Interface class Bindable b where
bind :: b a -> Binding -> IO ()
![Page 8: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/8.jpg)
Binding (Presenter)
Data Source (Model)
Target (View)
Model-View-Presenter
![Page 9: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/9.jpg)
-update'()
Binding
+bind()
Binding Source
1 *
+readVar()+writeVar()+modifyVar()+modifyVar'()
«interface»Variable 11
Variable
Target
1 1
Class Diagram
![Page 10: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/10.jpg)
Binding Source Variable Binding Target
writeVar
writeVar
update'
apply
Sequence Diagram
![Page 11: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/11.jpg)
binding-core ◦ Core binding functionality
binding-gtk ◦ Gtk2Hs interface
binding-wx ◦ WxHaskell interface
![Page 12: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/12.jpg)
Unit Testing ◦ HUnit
◦ QuickCheck
Integration Testing ◦ Simple
◦ List
![Page 13: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/13.jpg)
No one-size-fits-all abstraction for GUIs
IO Monad = Superglue
FRP = Animation, Arcade Games
Data Binding = Data Processing Applications
Haskell = Corporate Desktop?
![Page 14: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/14.jpg)
Quixotic Quest ◦ One abstraction to rule them all
Domain-specific frameworks ◦ Build on existing toolkit bindings
Business applications
![Page 15: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/15.jpg)
Complex data binding
Master-detail relationships
Data Persistence
Mapping Functional Data Types to Relational Databases; the Saigon of Computer Science?
![Page 16: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/16.jpg)
False Dichotomy? ◦ Imperative Languages for Business
◦ Functional Languages for Academia and Finance
Need more Functional Programming ◦ Free lunches
◦ Static verification
Functional programming languages must support imperative tasks
Data Binding for Data Processing Applications
It can be done!
![Page 17: Slides for Graphical User Interfaces in Haskell](https://reader034.fdocuments.us/reader034/viewer/2022052606/58eb8caf1a28ab82118b46ef/html5/thumbnails/17.jpg)