0
Upcoming SlideShare
×

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.
Standard text messaging rates apply

1,298

Published on

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

Are you sure you want to Yes No
• Be the first to comment

Views
Total Views
1,298
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
14
0
Likes
1
Embeds 0
No embeds

No notes for slide

### Transcript

• 1. Haskell for Scala-ists Chris Eidhof
• 2. Three things • Datatypes • Purity • Laziness
• 3. List Type-parameter Constructor • data [a] = [] | a : [a] Case distinction Type Constructor
• 4. 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
• 5. Purity • State = Evil
• 6. Purity • Same Input • ntial Refere cy Transparen = • Same output
• 7. Purity • No side effects: • * Variables / Mutable state • * I/O • * launchMissiles()
• 8. Example • sort :: [Int] -> [Int] How do we know sort doesn’t launch missiles?
• 9. Doing I/O • putStrLn :: String -> IO () The IO type shows us it’s not pure
• 10. Doing I/O (>>=) :: IO a -> (a -> IO b) -> IO b main = putStrLn "hello! what's your name?" >>= () -> getLine >>= name -> putStrLn ("hello, " ++ name)
• 11. Doing I/O main = do putStrLn "hello! what's your name?" name <- getLine putStrLn ("hello, " ++ name)
• 12. Fusion • myFunction = map square . map toInt • = map (square . toInt)
• 13. Quickcheck • Automatic testing of pure code.
• 14. Parallel code • map  :: (a -> b) -> [a] -> [b] • parMap :: (a -> b) -> [a] -> [b]
• 15. Composability • Pure code is easy to compose, it is • * Stateless • * Self-contained
• 16. Effects Useful Most Nirvana languages Haskell Useless Dangerous Safe Simon Peyton-Jones, Caging The Effects Monster
• 17. Laziness • if (x < 10 && x > 5)
• 18. Laziness: Quicksort qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs) minimum ls = head (quickSort ls)