slides for graphical user interfaces in haskell

17
Graphical User Interfaces in Haskell By Gideon Sireling August 2011

Upload: gideon-sireling

Post on 10-Apr-2017

198 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Slides for Graphical User Interfaces in Haskell

Graphical User Interfaces in Haskell

By Gideon Sireling

August 2011

Page 2: Slides for Graphical User Interfaces in Haskell

Introduction Literature Review Analysis Aims Design Packaging Testing Conclusions Evaluation Future Work

Page 3: Slides for Graphical User Interfaces in Haskell

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

Haskell

IO Monad

Toolkits ◦ Gtk2Hs

◦ WxHaskell

◦ QtHaskell

Functional Reactive Programming ◦ Events

◦ Behaviours

◦ Reactive Behaviour

Page 5: Slides for Graphical User Interfaces in Haskell

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

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

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

Binding (Presenter)

Data Source (Model)

Target (View)

Model-View-Presenter

Page 9: Slides for Graphical User Interfaces in Haskell

-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

Binding Source Variable Binding Target

writeVar

writeVar

update'

apply

Sequence Diagram

Page 11: Slides for Graphical User Interfaces in Haskell

binding-core ◦ Core binding functionality

binding-gtk ◦ Gtk2Hs interface

binding-wx ◦ WxHaskell interface

Page 12: Slides for Graphical User Interfaces in Haskell

Unit Testing ◦ HUnit

◦ QuickCheck

Integration Testing ◦ Simple

◦ List

Page 13: Slides for Graphical User Interfaces in Haskell

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

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

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

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