====== Presentation ======
===== Paradigm =====
* purely-functional;
* lazy evaluation.
===== Typing discipline =====
* static typed;
* strongly typed;
* inferred.
====== Learning Haskell ======
* [[http://www.haskell.org/ | The Haskell Programming Language]]
====== Simple examples ======
You can compare functions below with the [[cs_lang:ocaml#simple_examples | Objective Caml]] version.
===== Increment a number =====
let inc = (+) n
-- Alternative:
let inc n = succ n
===== Caesar cipher =====
-- Shifts a character to the right if positive, left if negative.
shift :: Int -> Char -> Char
shift n c | isUpper c = chr $ ord 'A' + ((ord c + n - ord 'A') `mod` 26)
| isLower c = chr $ ord 'a' + ((ord c + n - ord 'a') `mod` 26)
| otherwise = c
encode :: Int -> String -> String
encode _ [] = []
encode n xs = map (shift n) xs
===== Parity =====
parity :: Integral a => [a] -> [Bool]
-- Using recursion
parity [] = []
parity (x:list) = [even x] ++ parity list
-- Using map
parity list = map even list