0
Upcoming SlideShare
×

HN NL - Haskell

645

Published on

Published in: Technology, Education
1 Like
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
Your message goes here
• Be the first to comment

Views
Total Views
645
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
6
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "HN NL - Haskell"

1. 1. Welcome woensdag 27 januari 2010
2. 2. Haskell Chris Eidhof woensdag 27 januari 2010
3. 3. Three things • Strong types • Purity • Larger example woensdag 27 januari 2010
4. 4. Strong Types • As programmers, we do a lot of testing: • * Unit Testing • * Debugging • * Speciﬁcation woensdag 27 januari 2010
5. 5. Strong Types • Can we automate testing? woensdag 27 januari 2010
6. 6. List Type-parameter Constructor • data [a] = [] | a : [a] Type Constructor woensdag 27 januari 2010
7. 7. List Example Example: List.hs woensdag 27 januari 2010
8. 8. Functions Give me a list of a And I’ll return a list of a • reverse :: [a] -> [a] • reverse [] = [] • reverse (x:xs) = reverse xs ++ [x] Pattern Matching Example: Reverse.hs woensdag 27 januari 2010
9. 9. Purity • State = Evil woensdag 27 januari 2010
10. 10. Purity • Same Input • ntial Refere cy Transp aren = • Same output woensdag 27 januari 2010
11. 11. Purity • No side effects: • * Variables • * I/O • * launchMissiles() woensdag 27 januari 2010
12. 12. Example • sort :: [Int] -> [Int] How do we know sort doesn’t launch missiles? woensdag 27 januari 2010
13. 13. Doing I/O • putStr :: String -> IO () The IO type shows us it’s not pure woensdag 27 januari 2010
14. 14. Laziness • if (x < 10 && x > 5) • Example: Lazy.hs woensdag 27 januari 2010
15. 15. Quickcheck • Automatic testing of pure code. Example: Reverse.hs woensdag 27 januari 2010
16. 16. Software Transactional Memory • Composable transactions • No deadlocks! woensdag 27 januari 2010
17. 17. Fusion • myFunction = map square . map toInt • = map (square . toInt) woensdag 27 januari 2010
18. 18. Parallel code • map  :: (a -> b) -> [a] -> [b] • parMap :: (a -> b) -> [a] -> [b] woensdag 27 januari 2010
19. 19. Effects Useful Most Nirvana languages Haskell Useless Dangerous Safe Simon Peyton-Jones, Caging The Effects Monster woensdag 27 januari 2010
20. 20. Arc Challenge • Write a program that causes the url said (e.g. http:// localhost:port/said) to produce a page with an input ﬁeld and a submit button. When the submit button is pressed, that should produce a second page with a single link saying "click here." When that is clicked it should lead to a third page that says "you said: ..." where ... is whatever the user typed in the original input ﬁeld. The third page must only show what the user actually typed. I.e. the value entered in the input ﬁeld must not be passed in the url, or it would be possible to change the behavior of the ﬁnal page by editing the url. woensdag 27 januari 2010
21. 21. Arc Challenge • Solution in Arc: • (defop said req (aform [onlink "click here" (pr "you said: " (arg _ "foo"))] (input "foo") (submit))) • woensdag 27 januari 2010
22. 22. Arc Challenge arc = do name <- input           link "click here"           display \$ "you said:" ++ name See gist: http://gist.github.com/260052 woensdag 27 januari 2010
23. 23. Arc Challenge (2) input uses type-inference! arc2 = do  name  <- input            (x,y) <- input            link "click here"            display (add x y)            display ("you said:" ++ name) woensdag 27 januari 2010