2008-01-25 tangible value

Post on 12-May-2015

402 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Tangible Valuein Haskell

1Friday, January 25, 2008

•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

Eros3Friday, January 25, 2008

4Friday, January 25, 2008

applications:

1. user-friendly2. usable3. concrete4. visual

libraries:

1. programmer-friendly2. composable3. abstract4. syntactic

5Friday, January 25, 2008

•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

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

TV8Friday, January 25, 2008

原始程式

9Friday, January 25, 2008

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

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

抽出I/O

12Friday, January 25, 2008

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

type GradingStr = String -> StringgradingStr :: GradingStr

grades_2 = readFile "tasks" >>= return . gradingStr >>= putStr

14Friday, January 25, 2008

inTV

15Friday, January 25, 2008

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

Eros17Friday, January 25, 2008

(1)18Friday, January 25, 2008

視覺化19Friday, January 25, 2008

20Friday, January 25, 2008

21Friday, January 25, 2008

22Friday, January 25, 2008

23Friday, January 25, 2008

(2)24Friday, January 25, 2008

融合25Friday, January 25, 2008

26Friday, January 25, 2008

27Friday, January 25, 2008

28Friday, January 25, 2008

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

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

(3)31Friday, January 25, 2008

MV分離

32Friday, January 25, 2008

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

•TypeCompose

•DeepArrow

•DataDriven

•Phooey

Eros

•TV

•GuiTV

•wxHaskell

•wxWidgets

34Friday, January 25, 2008

top related