HN NL - Haskell
Upcoming SlideShare
Loading in...5
×
 

HN NL - Haskell

on

  • 989 views

 

Statistics

Views

Total Views
989
Views on SlideShare
986
Embed Views
3

Actions

Likes
0
Downloads
5
Comments
0

1 Embed 3

http://www.slideshare.net 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

HN NL - Haskell HN NL - Haskell Presentation Transcript

  • Welcome woensdag 27 januari 2010
  • Haskell Chris Eidhof woensdag 27 januari 2010
  • Three things • Strong types • Purity • Larger example woensdag 27 januari 2010
  • Strong Types • As programmers, we do a lot of testing: • * Unit Testing • * Debugging • * Specification woensdag 27 januari 2010
  • Strong Types • Can we automate testing? woensdag 27 januari 2010
  • List Type-parameter Constructor • data [a] = [] | a : [a] Type Constructor woensdag 27 januari 2010
  • List Example Example: List.hs woensdag 27 januari 2010
  • 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
  • Purity • State = Evil woensdag 27 januari 2010
  • Purity • Same Input • ntial Refere cy Transp aren = • Same output woensdag 27 januari 2010
  • Purity • No side effects: • * Variables • * I/O • * launchMissiles() woensdag 27 januari 2010
  • Example • sort :: [Int] -> [Int] How do we know sort doesn’t launch missiles? woensdag 27 januari 2010
  • Doing I/O • putStr :: String -> IO () The IO type shows us it’s not pure woensdag 27 januari 2010
  • Laziness • if (x < 10 && x > 5) • Example: Lazy.hs woensdag 27 januari 2010
  • Quickcheck • Automatic testing of pure code. Example: Reverse.hs woensdag 27 januari 2010
  • Software Transactional Memory • Composable transactions • No deadlocks! woensdag 27 januari 2010
  • Fusion • myFunction = map square . map toInt • = map (square . toInt) woensdag 27 januari 2010
  • Parallel code • map  :: (a -> b) -> [a] -> [b] • parMap :: (a -> b) -> [a] -> [b] woensdag 27 januari 2010
  • Effects Useful Most Nirvana languages Haskell Useless Dangerous Safe Simon Peyton-Jones, Caging The Effects Monster woensdag 27 januari 2010
  • 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
  • Arc Challenge • Solution in Arc: • (defop said req (aform [onlink "click here" (pr "you said: " (arg _ "foo"))] (input "foo") (submit))) • woensdag 27 januari 2010
  • Arc Challenge arc = do name <- input           link "click here"           display $ "you said:" ++ name See gist: http://gist.github.com/260052 woensdag 27 januari 2010
  • 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
  • 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
  • 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
  • Keep in touch • http://github.com/chriseidhof • @chriseidhof woensdag 27 januari 2010
  • One more thing... woensdag 27 januari 2010
  • Have fun woensdag 27 januari 2010