Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Principal type-schemes for functional programs
Phil Freeman
June 28, 2017
Programming
0
130
Principal type-schemes for functional programs
Phil Freeman
June 28, 2017
Tweet
Share
More Decks by Phil Freeman
See All by Phil Freeman
The Future Is Comonadic!
paf31
14
3.4k
Incremental Programming in PureScript
paf31
3
740
An Overview of the PureScript Type System
paf31
5
1.3k
Fun with Profunctors
paf31
2
610
Intro to psc-package
paf31
0
73
Stack Safety for Free
paf31
0
140
Other Decks in Programming
See All in Programming
roadmap to rust 2024
matsu7874
1
880
コードの解析と言語習得の心得
jinjin33333
0
130
モデリングの費用対効果
masuda220
PRO
3
910
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
2
460
実録mruby組み込み体験
coe401_
0
110
インフラエンジニアの多様性と評価、またはキャリアへのつなげ方 / Careers as infrastructure engineers
katsuhisa91
0
540
Named Document って何?
harunakano
0
500
The future of trust stores in Python
sethmlarson
0
180
tfcon2022_Web3Dひとめぐり.pdf
emadurandal
0
1.1k
A technique to implement DSL in Ruby
okuramasafumi
0
810
Licences open source : entre guerre de clochers et radicalité
pylapp
2
340
既存画面の Jetpack Composeでの書き換え: FAANSでの事例紹介 / Case study of rewriting existing screens with Jetpack Compose
horie1024
0
300
Featured
See All Featured
A designer walks into a library…
pauljervisheath
196
16k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
Gamification - CAS2011
davidbonilla
75
3.9k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
237
19k
Embracing the Ebb and Flow
colly
73
3.3k
How to name files
jennybc
39
59k
Fantastic passwords and where to find them - at NoRuKo
philnash
25
1.5k
Designing the Hi-DPI Web
ddemaree
272
32k
We Have a Design System, Now What?
morganepeng
35
2.9k
From Idea to $5000 a Month in 5 Months
shpigford
372
44k
Transcript
Principal type-schemes for functional programs Luis Damas and Robin Milner
(POPL `82)
Agenda • Slides • Code
ML • Meta Language for LCF • Type inference •
Influence on Haskell, Rust, F#, OCaml, ... • “Sweet spot” in type system design
ML letrec f xs = if null xs then nil
else snoc (f (tl xs)) (hd xs) What type does this function have? null : ∀ ( list → bool) snoc : ∀ ( list → → list) hd, tl : ∀ ( list → ) nil : ∀ ( list)
ML What about: let s x y z = x
z (y z) ?
Type Inference f : ∀ ( list → list) •
Given f, how can we infer this type? • What does it even mean for a value to have a type? • How can we be sure we have the most general type?
Lambda Calculus Expressions e: • Identifiers: , , … •
Applications: e e’ • Abstractions: . e • Let bindings: let = e in e’
Lambda Calculus For example: . . . . let =
. . in
Types Monotypes : • Variables: • Primitives: • Functions: →
Type Schemes Type schemes : • Monomorphic: • Polymorphic: ∀
. Type schemes are types with identifiers bound by ∀ at the front.
Substitutions Mappings from variables to types • Can instantiate type
schemes using substitutions • Gives a simple subtyping relation on type schemes
Semantics Construct a semantic domain (CPO) V containing • Primitives
• Functions • An error element and a semantic function : e → (Id → V) → V
Semantics Identify types with subsets of V Define the judgment
A ╞ e : when (∀ ( : ’) ∈ A. ∈ ’) ⇒ e ∈
Declarative System Variable rule:
Declarative System Application rule:
Declarative System Abstraction rule:
Declarative System Let rule:
Declarative System Instantiation rule:
Declarative System Generalization rule:
Soundness If A e : then A ╞ e :
“Static behavior determines dynamic behavior”
Example Prove: . : ∀ . ( → → )
→ →
Algorithm W • The inference rules do not translate easily
into an algorithm (why not?) • Introduce w : Exp → Env → (Env, )
Algorithm W • W attempts to build a substitution, bottom-up
• W can fail with an error if there is no valid typing • Intuition: ◦ Collect constraints ◦ Then solve constraints • Reality: W is the fusion of these two steps • See the code!
Unification • Unification gives local information about types • We
assemble a global solution from local information
Unification Example: ( → ) ~ (( → ) →
) ~ ( → ) ~ ~ ( → )
Occurs Check Prevents inference of infinite types w( . ,
nil) = error! Can’t unify ~ if occurs in the body of . E.g. ~ → ~ ((… → ) → ) →
Soundness If w(A, e) = (S, ) then A e
: “Algorithm W constructs typing judgments”
Completeness If A e : then w(A, e) constructs a
typing judgment for e which generalises the above. “Algorithm W constructs principal types”
Further Reading More type systems • System F, F⍵ •
Rank-N types • Type Classes • Dependent Types • Refinement Types Other approaches • Constraints • Bidirectional typechecking • SMT See TAPL & ATAPL!
Acknowledgments DHM axioms reproduced from Wikipedia under the CC-3.0 Attribution/ShareAlike
license