compojure-api

Swagger & Schema FTW!

Guillaume Buisson & Yann Esposito
Vigiglobe

API?

Language Fonctionnel


Déclaratif vs Impératif

Pur

vs disfonctionnel

Fainéant




⇒ Structures infinies !!!

Système de Typage Moderne




⇒ Agréable & Utile !

Propriétés par défaut

Encourage les bons choix par défaut

Utilisation

Production ?

Vitesse

source CLBG

Workflows (basic)

  1. Programmer
  2. tester en cliquant/scrollant, REPL, etc...
  3. 90% → détecter une erreur ⇒ goto 1
  4. envoyer en (recette/production)
  5. 50% (10% si recette) → Erreur en production ⇒ ARGH!!! goto 1

Workflows (TDD)

  1. Écrire des tests (voir workflow basic)
  2. Programmer
  3. lancer les tests (66% erreur ⇒ goto 2 ou 1)
  4. tester en cliquant/scrollant, REPL, etc...
  5. 30% détecter une erreur ⇒ goto 1
  6. envoyer en (recette/production)
  7. 5 à 10%: Erreur en production ⇒ ARGH !!! goto 1

Workflows Haskell (Type DD)

  1. Programmer
  2. Compiler (90% erreur, corriger avec l'aide goto 1)
  3. tester en cliquant/scrollant, REPL, etc...
  4. 3% → détecter une erreur ⇒ goto 1
  5. envoyer en (recette/production)
  6. 0.5% → Erreur en production ⇒ ARGH !!! goto 1

0,5% c'est encore trop!

QuickCheck, SmallCheck:
engendrent des tests unitaires aléatoirement
HUnit:
Tests unitaires

Facile ?

Exemples (1)

[1,2,3] == [1..3]
[1,2,3] == [1,2] ++ [3]
[1,2,3] == 1:2:[]
[1,3..10] == [1,3,5,7,9]
[1,3..10] !! 3 == 7
[1,'a',3] 
[(1,'a'),(3,'c')] 

Exemples (2)

fib = 0:1:zipWith (+) fib (tail fib)

take 15 fib ⇔
[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377]

fib !! 200 ⇔
280571172992510140037611932413038677189525

Exemples (3)

sort [] = []
sort (x:xs) = sort [y | y <- xs, y < x] ++
              [x] ++
              sort [y | y <- xs, y >= x]

Exemples (3bis)

sort [] = []
sort (x:xs) = sort (filter (< x) xs) ++
              [x] ++
              sort (filter (>= x) xs)

Le bon choix par défaut

data Metres a = Metres a
data Pieds a = Pieds a

launchTheMissiles :: Metres Integer -> IO ()
launchTheMissiles n = do ...

launchTheMissile 100 
hauteur = Pieds 3000
launchTheMissile hauteur 
launchTheMissile (pieds2Metres hauteur) 

IO DSL

main = do
    putStrLn "Quel est votre nom?"
    nom <- readLine
    putStrLn ("Bonjour " ++ nom)

Conclusion

Use arrow keys to navigate