2008-01-25 Tangible Value
-
Upload
lin-jen-shin -
Category
Technology
-
view
402 -
download
0
Transcript of 2008-01-25 Tangible Value
![Page 1: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/1.jpg)
Tangible Valuein Haskell
1Friday, January 25, 2008
![Page 2: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/2.jpg)
•http://www.youtube.com/watch?v=faJ8N0giqzw
•http://conal.net/papers/Eros/
•http://journal.conal.net/#[[separating IO from logic -- example]]
•http://conal-elliott.blogspot.com/search/label/TV
Conal Elliott
2Friday, January 25, 2008
![Page 3: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/3.jpg)
Eros3Friday, January 25, 2008
![Page 4: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/4.jpg)
4Friday, January 25, 2008
![Page 5: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/5.jpg)
applications:
1. user-friendly2. usable3. concrete4. visual
libraries:
1. programmer-friendly2. composable3. abstract4. syntactic
5Friday, January 25, 2008
![Page 6: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/6.jpg)
•Write programs that do one thing and do it well
•Write programs to work together
•Write programs to handle text streams, because that is a universal interface
UNIX philosophy
Doug McIlroy
6Friday, January 25, 2008
![Page 7: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/7.jpg)
godfat ~/p/l/l/l/proc> ls | sort | cat -n 1 bind.rb 2 chain.rb 3 compose.rb 4 curry.rb
7Friday, January 25, 2008
![Page 8: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/8.jpg)
TV8Friday, January 25, 2008
![Page 9: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/9.jpg)
原始程式
9Friday, January 25, 2008
![Page 10: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/10.jpg)
module Grading where
import Data.List (sort)import Data.Map (Map,empty,keys,insertWith,findWithDefault)import Text.Printf
import Interface.TVimport Interface.TV.OFun() -- work around GHC bug. ticket #1145
10Friday, January 25, 2008
![Page 11: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/11.jpg)
grades = do src <- readFile "tasks" let pairs = map (split.words) (lines src) grades = foldr insert empty pairs mapM_ (draw grades) (sort (keys grades)) where insert (s, g) = insertWith (++) s [g] split [name,mark] = (name, read mark) draw g s = printf "%s\t%s\tAverage: %f\n" s (show marks) avg where marks = findWithDefault (error "No such student") s g avg = sum marks / fromIntegral (length marks) :: Double
11Friday, January 25, 2008
![Page 12: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/12.jpg)
抽出I/O
12Friday, January 25, 2008
![Page 13: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/13.jpg)
gradingStr src = concatMap (draw grades) (sort (keys grades)) where pairs = map (split.words) (lines src) grades = foldr insert empty pairs insert (s, g) = insertWith (++) s [g] split [name,mark] = (name, read mark) draw g s = printf "%s\t%s\tAverage: %f\n" s (show marks) avg where marks = findWithDefault (error "No such student") s g avg = sum marks / fromIntegral (length marks) :: Double
13Friday, January 25, 2008
![Page 14: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/14.jpg)
type GradingStr = String -> StringgradingStr :: GradingStr
grades_2 = readFile "tasks" >>= return . gradingStr >>= putStr
14Friday, January 25, 2008
![Page 15: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/15.jpg)
inTV
15Friday, January 25, 2008
![Page 16: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/16.jpg)
type GradingStr = String -> StringgradingStr :: GradingStr
grades_2 = readFile "tasks" >>= return . gradingStr >>= putStr
gradingStrOut = oLambda (fileIn "tasks") stringOutgradingStrT :: TV KIO GradingStrgradingStrT = tv gradingStrOut gradingStr
grades_3 = runTV gradingStrT
16Friday, January 25, 2008
![Page 17: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/17.jpg)
Eros17Friday, January 25, 2008
![Page 18: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/18.jpg)
(1)18Friday, January 25, 2008
![Page 19: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/19.jpg)
視覺化19Friday, January 25, 2008
![Page 20: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/20.jpg)
20Friday, January 25, 2008
![Page 21: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/21.jpg)
21Friday, January 25, 2008
![Page 22: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/22.jpg)
22Friday, January 25, 2008
![Page 23: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/23.jpg)
23Friday, January 25, 2008
![Page 24: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/24.jpg)
(2)24Friday, January 25, 2008
![Page 25: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/25.jpg)
融合25Friday, January 25, 2008
![Page 26: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/26.jpg)
26Friday, January 25, 2008
![Page 27: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/27.jpg)
27Friday, January 25, 2008
![Page 28: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/28.jpg)
28Friday, January 25, 2008
![Page 29: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/29.jpg)
first :: (a -> a') -> ((a, b) -> (a',b ))second :: (b -> b') -> ((a, b) -> (a ,b'))result :: (b -> b') -> ((a->b) -> (a->b'))
first f = \ (a, b) -> (f a, b)second g = \ (a, b) -> ( a, g b)result g = \ f -> g . f
29Friday, January 25, 2008
![Page 30: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/30.jpg)
sf :: (b->b') -> (a,(b ,c)) -> (a,(b',c))
sf = second.first
frsrf :: (c->c') -> (a->(f,b->(c ,g)),e) -> (a->(f,b->(c',g)),e)
frsrf = first.result.second.result.first
funFirst :: (d -> (c->a)) -> ((d,b) -> (c->(a,b)))
30Friday, January 25, 2008
![Page 31: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/31.jpg)
(3)31Friday, January 25, 2008
![Page 32: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/32.jpg)
MV分離
32Friday, January 25, 2008
![Page 33: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/33.jpg)
type TV a = (Out a, a)
type Out a = ...put :: Put a -> Out aopair :: Out a -> Out b -> Out (a, b)olambda :: In a -> Out b -> Out (a->b)
type In a = ...get :: Get a -> In aipair :: In a -> In b -> In (a,b)
33Friday, January 25, 2008
![Page 34: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/34.jpg)
•TypeCompose
•DeepArrow
•DataDriven
•Phooey
Eros
•TV
•GuiTV
•wxHaskell
•wxWidgets
34Friday, January 25, 2008
![Page 35: 2008-01-25 Tangible Value](https://reader033.fdocuments.us/reader033/viewer/2022052619/5551ea92b4c90501638b51cc/html5/thumbnails/35.jpg)
•Tangible polymorphism?
•Direct structural tweaks
•Symmetric In/Out (ilambda)
•“GUIs are types” as GUI design guide
•TVs as composable MVC
To explore
35Friday, January 25, 2008