hn nl - haskell

28
Welcome woensdag 27 januari 2010

Upload: chriseidhof

Post on 12-May-2015

637 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: HN NL - Haskell

Welcome

woensdag 27 januari 2010

Page 2: HN NL - Haskell

HaskellChris Eidhof

woensdag 27 januari 2010

Page 3: HN NL - Haskell

Three things

• Strong types

• Purity

• Larger example

woensdag 27 januari 2010

Page 4: HN NL - Haskell

Strong Types

• As programmers, we do a lot of testing:

• * Unit Testing

• * Debugging

• * Specification

woensdag 27 januari 2010

Page 5: HN NL - Haskell

Strong Types

• Can we automate testing?

woensdag 27 januari 2010

Page 6: HN NL - Haskell

List

• data [a] = [] | a : [a]

Type

Type-parameter

Constructor

Constructor

woensdag 27 januari 2010

Page 7: HN NL - Haskell

List Example

Example: List.hs

woensdag 27 januari 2010

Page 8: HN NL - Haskell

Functions

• reverse :: [a] -> [a]

• reverse [] = []

• reverse (x:xs) = reverse xs ++ [x]

Example: Reverse.hs

Give me a list of a And I’ll return alist of a

Pattern Matching

woensdag 27 januari 2010

Page 9: HN NL - Haskell

Purity

• State = Evil

woensdag 27 januari 2010

Page 10: HN NL - Haskell

Purity

• Same Input

• =

• Same output

Referential

Transparency

woensdag 27 januari 2010

Page 11: HN NL - Haskell

Purity

• No side effects:

• * Variables

• * I/O

• * launchMissiles()

woensdag 27 januari 2010

Page 12: HN NL - Haskell

Example

• sort :: [Int] -> [Int]

How do we know sort doesn’t launch missiles?

woensdag 27 januari 2010

Page 13: HN NL - Haskell

Doing I/O

• putStr :: String -> IO ()

The IO type shows us it’s not pure

woensdag 27 januari 2010

Page 14: HN NL - Haskell

Laziness

• if (x < 10 && x > 5)

• Example: Lazy.hs

woensdag 27 januari 2010

Page 15: HN NL - Haskell

Quickcheck

• Automatic testing of pure code.

Example: Reverse.hs

woensdag 27 januari 2010

Page 16: HN NL - Haskell

Software Transactional

Memory

• Composable transactions

• No deadlocks!

woensdag 27 januari 2010

Page 17: HN NL - Haskell

Fusion

• myFunction = map square . map toInt

• = map (square . toInt)

woensdag 27 januari 2010

Page 18: HN NL - Haskell

Parallel code

• map  :: (a -> b) -> [a] -> [b]

• parMap :: (a -> b) -> [a] -> [b]

woensdag 27 januari 2010

Page 19: HN NL - Haskell

Effects

Dangerous SafeUseless

UsefulMost

languages

Haskell

Nirvana

Simon Peyton-Jones, Caging The Effects Monsterwoensdag 27 januari 2010

Page 20: HN NL - Haskell

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

Page 21: HN NL - Haskell

Arc Challenge

• Solution in Arc:

• (defop said req

(aform [onlink "click here" (pr "you said: " (arg _ "foo"))] (input "foo") (submit)))

woensdag 27 januari 2010

Page 22: HN NL - Haskell

Arc Challenge

arc = do name <- input          link "click here"          display $ "you said:" ++ name

See gist: http://gist.github.com/260052

woensdag 27 januari 2010

Page 23: HN NL - Haskell

Arc Challenge (2)

arc2 = do  name  <- input           (x,y) <- input           link "click here"           display (add x y)           display ("you said:" ++ name)

input uses type-inference!

woensdag 27 januari 2010

Page 24: HN NL - Haskell

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

Page 25: HN NL - Haskell

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

Page 26: HN NL - Haskell

Keep in touch

• http://github.com/chriseidhof

• @chriseidhof

woensdag 27 januari 2010

Page 27: HN NL - Haskell

One more thing...

woensdag 27 januari 2010

Page 28: HN NL - Haskell

Have fun

woensdag 27 januari 2010