haskell para pythonistas
        @andrewsmedina
porque haskell?

• puramente funcional
• lazy
• um novo paradigma de linguagem
python x haskell
•   multi paradigma   •   funcional

•   dinâmica          •   estática

•   interpretada      •   compilada

•   recursao          •   recursao++
python
>>> 2+15
17
haskell
Prelude> 2+15
17
python
def dobro(numero):
  return numero + numero
haskell
dobro numero = numero + numero
python
def fib(n):
  if n == 0:
      return 0
  elif n == 1:
      return 1
  else:
      return fib(n-1) + fib(n-2)
haskell
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
python
>>> lista = [1,2,3,4,5]
>>> [numero*2 for numero in lista]
[2, 4, 6, 8, 10]
haskell
Prelude> let lista = [1,2,3,4,5]
Prelude> [x*2 | x <- lista]
[2,4,6,8,10]
python
>>> lista = [1,2,3,4,5]
>>> [numero*2 for numero in lista if numero%2]
[2, 6, 10]
haskell
Prelude> let lista = [1,2,3,4,5]
Prelude> [numero*2 | numero <- lista, odd numero]
[2,6,10]
haskell
Prelude> [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]
[(3,4,5),(6,8,10)]
haskell
Prelude> product [1..10]
3628800
haskell
main = do firstFactorOver(3)

firstFactorOver n = head [trianguleNumber(x) | x <- [1..], length ( factorsOf ( trianguleNumber(x) ) ) > n ]
trianguleNumber n = sum[1..n]
factorsOf number = 1:[x| x <- [2..number], number `mod` x == 0] ++ [number]
python funcional

• itertools
• list comprehensions
• map, reduce, zip...
como começar?


• ghci
http://learnyouahaskell.com

Haskell para pythonistas