Your SlideShare is downloading. ×
0
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Hackersnl
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Hackersnl

389

Published on

My presentation about Haskell on the NL Hacker News Meetup

My presentation about Haskell on the NL Hacker News Meetup

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
389
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Welcome woensdag 27 januari 2010
  2. Haskell Chris Eidhof woensdag 27 januari 2010
  3. Three things • Strong types • Purity • Larger example woensdag 27 januari 2010
  4. Strong Types • As programmers, we do a lot of testing: • * Unit Testing • * Debugging • * Specification woensdag 27 januari 2010
  5. Strong Types • Can we automate testing? woensdag 27 januari 2010
  6. List Type-parameter Constructor • data [a] = [] | a : [a] Type Constructor woensdag 27 januari 2010
  7. List Example Example: List.hs woensdag 27 januari 2010
  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. Purity • State = Evil woensdag 27 januari 2010
  10. Purity • Same Input • ntial Refere cy Transp aren = • Same output woensdag 27 januari 2010
  11. Purity • No side effects: • * Variables • * I/O • * launchMissiles() woensdag 27 januari 2010
  12. Example • sort :: [Int] -> [Int] How do we know sort doesn’t launch missiles? woensdag 27 januari 2010
  13. Doing I/O • putStr :: String -> IO () The IO type shows us it’s not pure woensdag 27 januari 2010
  14. Laziness • if (x < 10 && x > 5) • Example: Lazy.hs woensdag 27 januari 2010
  15. Quickcheck • Automatic testing of pure code. Example: Reverse.hs woensdag 27 januari 2010
  16. Software Transactional Memory • Composable transactions • No deadlocks! woensdag 27 januari 2010
  17. Fusion • myFunction = map square . map toInt • = map (square . toInt) woensdag 27 januari 2010
  18. Parallel code • map  :: (a -> b) -> [a] -> [b] • parMap :: (a -> b) -> [a] -> [b] woensdag 27 januari 2010
  19. Effects Useful Most Nirvana languages Haskell Useless Dangerous Safe Simon Peyton-Jones, Caging The Effects Monster woensdag 27 januari 2010
  20. Arc Challenge • Write a program that causes the url said (e.g. http:// localhost:port/said) to produce a page with an input field 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 field. The third page must only show what the user actually typed. I.e. the value entered in the input field must not be passed in the url, or it would be possible to change the behavior of the final page by editing the url. woensdag 27 januari 2010
  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. 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. 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
  24. Read more • Real World Haskell - http://book.realworldhaskell.org/ • Haskell.org - http://haskell.org • Haskell Café - http://haskell.org/haskellwiki/Mailing_lists • Planet Haskell - http://planet.haskell.org/ • Haskell reddit - http://haskell.reddit.com • woensdag 27 januari 2010
  25. Getting Started • 1. Install the Haskell Platform • http://hackage.haskell.org/platform/ • 2. Haskell in 10 minutes • http://haskell.org/haskellwiki/ Learn_Haskell_in_10_minutes woensdag 27 januari 2010
  26. Keep in touch • http://github.com/chriseidhof • @chriseidhof woensdag 27 januari 2010
  27. One more thing... woensdag 27 januari 2010
  28. Have fun woensdag 27 januari 2010

×