Formation Programmation Fonctionnelle

publicité
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Formation Programmation Fonctionnelle
Yann Hamdaoui
VIA IRIF (Paris Diderot)
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
1
Programmation Fonctionnelle
Cékoi ?
Le calcul
Le λ-calcul
2
Systèmes de types
Des braves types
Les types simples
3
ML
Un p'tit x ?
Écolo-prog : recycler son code
GNU's Not Unix
C'est quoi ton type de terme ?
4
Practice !
Yago
ML
.
.
.
.
.
.
Practice !
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Cékoi ?
Ainsi fon,fon,ction
Qu'est-ce que la programmation fonctionnelle ?
Une classe de langages où les fonctions sont des "rst-class
citizens" (higher order functions)
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Cékoi ?
Ainsi fon,fon,ction
Qu'est-ce que la programmation fonctionnelle ?
Une classe de langages où les fonctions sont des "rst-class
citizens" (higher order functions)
Un paradigme (style) de programmation
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Cékoi ?
Ainsi fon,fon,ction
Qu'est-ce que la programmation fonctionnelle ?
Une classe de langages où les fonctions sont des "rst-class
citizens" (higher order functions)
Un paradigme (style) de programmation
Une classe de langages basés sur le λ-calcul
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Cékoi ?
Ainsi fon,fon,ction
Qu'est-ce que la programmation fonctionnelle ?
Une classe de langages où les fonctions sont des "rst-class
citizens" (higher order functions)
Un paradigme (style) de programmation
Une classe de langages basés sur le λ-calcul
Langages "fonctionnels" :
C,C++, Python,Ruby,Javascript,PHP,. . .
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Cékoi ?
Ainsi fon,fon,ction
Qu'est-ce que la programmation fonctionnelle ?
Une classe de langages où les fonctions sont des "rst-class
citizens" (higher order functions)
Un paradigme (style) de programmation
Une classe de langages basés sur le λ-calcul
Langages "fonctionnels" :
C,C++, Python,Ruby,Javascript,PHP,. . .
Langages fonctionnels :
Lisp,(Standard)ML,OCaml,F#,Haskell,Scala,. . .
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Qu'est-ce que le calcul
Comment dénir le calcul
commerçant : arithmétique
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Qu'est-ce que le calcul
Comment dénir le calcul
commerçant : arithmétique
informaticien : algorithme
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Qu'est-ce que le calcul
Comment dénir le calcul
commerçant : arithmétique
informaticien : algorithme
mathématicien : machines de Turing , fonctions récursives , . . .
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Qu'est-ce que le calcul
Comment dénir le calcul
commerçant : arithmétique
informaticien : algorithme
mathématicien : machines de Turing , fonctions récursives , . . .
Calcul : grandeurs (données) + opérations (instructions)
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Comment vas-tu, Ring ?
...
c
d
e
b
b
b
. . . Ruban d'entrées/sorties
état
Modèle de calcul universel
Modèle Turing-complet : simule une machine de Turing
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Turing-complétude
Exemples classiques de systèmes Turing-complet . . .
la plupart des langages de programmation
les fonctions récursives
jeux de la vie (automate cellulaire)
. . . et moins classiques
Magic : The Gathering
Minecraft
Conguration sendmail
Pour un langage impératif : test(if) + boucle ou goto +
read/write
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Von Neumann
Langages impératifs :
des instructions
une mémoire
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le calcul
Écrire, écrire, et écrire encore
Une notion naturelle pour nous est la ré-écriture :
(1 + (5*2) − 5) → (1 + (10) − 5)
(1+(10) − 5) → (11 − 5)
(11-5) → 6
mémoire + transitions vs expression + ré-écriture
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
L'avènement du λ
Syntaxe
V = {x, y , . . .} ensemble de variables
M, N ::= x | λx.M | M N
λ-calcul
λx.5
Exemples λx.λy .(x + y )
λf .λx.(f x)
Yago
fonction
x 7→ 5
x 7→ (y 7→ x + y )
(x, y ) 7→ x + y
(f , x) 7→ f (x)
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
Quid du calcul
Le calcul est eectué par ré-écriture : c'est la β -réduction
β -réduction
(λx.M)N → M[N/x]
Exemples
(λx.5)M → 5
((λx.λy .x + y ) 5) 6 → ??
Comment ré-écrire (U V ) W ?
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
β -réduction, version 2
β -réduction
M → M′
(appl)
M N → M′ N
N → N′
(appr )
M N′ → M N′
M → M′
(lam)
λx.M → λx.M ′
((λx .λy .x + y ) 5) 6
λf .λx.(f x) (λy .y ) 0
Yago
→
→
→
→
→
(λy .5 + y ) 6
(5 + 6)
λx .((λy .y ) x) 0
(λy .y ) 0
.
.
.
.
.
.
. . . .
. . . .
0
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
Stratégie
Il peut y avoir plusieurs réductions, mais l'ordre n'importe pas !
C'est la conuence
M
M2
M1
Dans un langage, on choisit une
N
stratégie particulière
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
Expressivité
Le λ-calcul est Turing-complet . . .
Mais pour un encodage fastidieux !
Terme
Encodage
n
Entier n λf .λx.f x = λf .λx.f (f (f . . . x)) . . .)
Boucle
Ω = (λx.x x) (λx.x x)
...
...
On garde l'esprit mais on le rend utilisable
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
λ-calcul pratique
Syntaxe
M, N
::=
x | λx.M | M N |
n | M + N | (M, N) | proji M
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
λ-calcul pratique
Et des règles de réduction
Sémantique
n+m
proji (M1 , M2 )
→
→
n+m
Mi
M1 → M1′
(pairl)
(M1 , M2 ) → (M1′ , M2 )
M1 → M1′
(plusl)
M1 + M2 → M1′ + M2
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Le λ-calcul
λ-calcul pratique
Exemples :
(λx .(proj1 x) + 5) (1 + 2, y )
proj2 5
(λx.1 + x, y ) + 0
5 (λx.x)
→
→
→∗
→
→
→
(proj1 (1 + 2, y )) + 5
(1 + 2) + 5
8
??
??
??
As-t-on un moyen d'empêcher ces situations a priori ? Oui : le
typage !
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Plan
1
2
3
4
Programmation Fonctionnelle
Cékoi ?
Le calcul
Le λ-calcul
Systèmes de types
Des braves types
Les types simples
ML
Un p'tit x ?
Écolo-prog : recycler son code
GNU's Not Unix
C'est quoi ton type de terme ?
Practice !
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Des braves types
Motivations
Un système de types est un ensemble de contraintes
supplémentaires sur la formation des programmes pour assurer
statiquement certaines propriétés
M + N : on veut que M →∗ m et N →∗ n
proji M : on veut que M →∗ (M1 , M2 )
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Des braves types
Motto
Milner's slogan
"Well-typed expressions do not go wrong"
Robin Milner
Ingrédients
Des types : spécication
Des règles de typage : preuve de la spécication
Il a plusieurs rôles :
Une documentation/spécication vériable automatiquement
Garanties de sécurité
Encourage l'abstraction et la programmation modulaire
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Des braves types
Motto
Milner's slogan
"Well-typed expressions do not go wrong"
Robin Milner
Traduction du slogan de Milner (type safety, type soudness, . . . ) :
Subject reduction : la réduction préserve le type
Progress : on peut toujours réduire un terme qui n'est pas une
valeur
On commence par le typage simple
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Types
τ, ν ::= int | τ → ν
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Règles - base
Γ, x : τ ⊢ x : τ
(var )
Γ, x : τ ⊢ M : τ ′
(lam)
Γ ⊢ λx.M : τ → τ ′
Γ ⊢ M : τ → τ′
Γ ⊢ N : τ (app)
Γ ⊢ M N : τ′
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Règles - extensions
Γ ⊢ n : int
(int)
Γ ⊢ M1 : int
Γ ⊢ M2 : int
(plus)
Γ ⊢ M1 + M2 : int
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Types - produit
τ, ν ::= int | τ → ν
|τ ×ν
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Règles - produit
Γ ⊢ M : τ1
Γ ⊢ N : τ2
(pair )
Γ ⊢ (M, N) : τ1 × τ2
Γ ⊢ M : τ1 × τ2
(proj)
Γ ⊢ proji M : τi
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Types - somme
τ, ν ::= int | τ → ν
τ ×ν |τ +ν
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Règles - somme
Γ ⊢ M : τ1
(inj)
Γ ⊢ inj1 M : τ1 + τ2
Γ ⊢ M : τ1 + τ2
Γ ⊢ N1 : τ1 → τ
Γ ⊢ N 2 : τ2 → τ
(case)
Γ ⊢ case M of N1 ||N2 : τ
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Exemples
x : int ⊢ x : int
(var)
⊢ λx.x : int → int
x : int, y : int ⊢ x : int
(var)
(abs)
x : int, y : int ⊢ y : int
x : int, y : int ⊢ x + y : int
(var)
(plus)
(abs)
x : int ⊢ λy .x + y : int → int
(abs)
⊢ λx.λy .x + y : int → int → int
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Les types simples
λ-calcul simplement typé
Les termes simplement typés terminent ! Trop de
contraintes...
Programmation générique : on doit typer λx.x diéremment
pour chaque type d'argument
Annoter tous les termes : c'est lourd !
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Plan
1
2
3
4
Programmation Fonctionnelle
Cékoi ?
Le calcul
Le λ-calcul
Systèmes de types
Des braves types
Les types simples
ML
Un p'tit x ?
Écolo-prog : recycler son code
GNU's Not Unix
C'est quoi ton type de terme ?
Practice !
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Un p'tit x ?
Boucles en λ-calcul
Comment coder la fonction factorielle ?
factorielle ::= λn. if n = 1 then 1
else n ∗ factorielle (n − 1)
Pour coder les boucles , ou les fonctions récursives :
l'auto-application
F ::= λf .λn. if n = 1 then 1
else n ∗ (f f (n − 1))
factorielle ::= F F
. . . mais pas typable !
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Un p'tit x ?
Point xe
On ajoute une construction syntaxique, une règle de type, une règle
de réduction :
Point xe
M ::= . . . | µf .M
µf .M → M[f /µf .M]
Γ, f : τ ⊢ M : τ
(fix)
Γ ⊢ µf .M : τ
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Un p'tit x ?
Exemple
→
→∗
→∗
µf .λn.( if n = 1 then 1 else n ∗ f (n − 1)) 2
λn .( if n = 1 then 1 else n ∗ (µf . . . .) (n − 1)) 2
2 ∗ ((µf . . . .) 1)
2∗1→1
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Écolo-prog : recycler son code
Polymorphisme
Certains termes, comme λx.x , admettent plusieurs types :
x : int ⊢ x : int
(var)
⊢ λx.x : int → int
Yago
(abs)
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Écolo-prog : recycler son code
Polymorphisme
Certains termes, comme λx.x , admettent plusieurs types :
x :α⊢x :α
(var)
⊢ λx.x : α → α
Yago
(abs)
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Écolo-prog : recycler son code
Types polymorphes
Types - polymorphisme
τ
::=
τ |τ →τ |τ ×τ |τ +τ
α | ∀α.τ
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Écolo-prog : recycler son code
Polymorphisme
Code générique
Code type-safe
Pas de pénalité (taille code, performances, etc.)
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
GNU's Not Unix
Type récursifs
Certains types ont besoin de référer à eux même :
Liste : vide ou un élément suivi d'une liste
Arbre : une feuille ou un noeud et deux arbres
λ-terme : cf dénition
Types récursifs
int_liste = Vide | Liste of int × int_liste
int_arbre = Feuille of int | Noeud of int × int_arbre × int_arbre
∀α.liste α = Vide | Liste of α × (liste α)
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
GNU's Not Unix
Le fardeau du typage
Récapitulons :
Types algébriques : créer de nouveaux types
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
GNU's Not Unix
Le fardeau du typage
Récapitulons :
Types algébriques : créer de nouveaux types
Types polymorphes : typer une seule fois les termes génériques
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
GNU's Not Unix
Le fardeau du typage
Récapitulons :
Types algébriques : créer de nouveaux types
Types polymorphes : typer une seule fois les termes génériques
Types récursifs : créer des types "cycliques"
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
GNU's Not Unix
Le fardeau du typage
Récapitulons :
Types algébriques : créer de nouveaux types
Types polymorphes : typer une seule fois les termes génériques
Types récursifs : créer des types "cycliques"
Si l'on doit tout typer à la main, bon courage . . .
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
C'est quoi ton type de terme ?
Les types c'est sympa mais
L'inférence de type consiste à déduire un type et une dérivation à
partir d'un terme non typé
Si ce problème a une solution "plus générale", on dit que les
programmes admettent un type principal
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
C'est quoi ton type de terme ?
Quelques systèmes de types
Types simples décidable mais pas de type principal
ML décidable et type principal
OCaml décidable mais plus de type principal
SystemF indécidable et pas de type principal
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Plan
1
2
3
4
Programmation Fonctionnelle
Cékoi ?
Le calcul
Le λ-calcul
Systèmes de types
Des braves types
Les types simples
ML
Un p'tit x ?
Écolo-prog : recycler son code
GNU's Not Unix
C'est quoi ton type de terme ?
Practice !
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Programmation Fonctionnelle
Systèmes de types
ML
Practice !
Et maintenant . . .
un peu de pratique !
Yago
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Formation Programmation Fonctionnelle
.
.
.
.
.
.
.
.
.
.
Téléchargement