Types and Programming Languages
$ git clone https://github.com/waddlaw/TAPL.git
$ cd TAPL
app |
versionn |
cabal-install |
3.2.0.0 |
stack |
2.5.1 |
cabal-fmt |
0.1.5.1 |
ormolu |
0.1.4.1 |
id |
chapter |
package name |
parse |
eval |
typecheck |
prettyprint |
run application |
1 |
ch03 |
bool |
✅ |
✅ |
N/A |
✅ |
stack run bool |
2 |
ch03 |
arith |
✅ |
✅ |
N/A |
✅ |
stack run arith |
3 |
ch05 |
lambda-untyped |
✅ |
✅ |
N/A |
✅ |
stack run untyped-lambda |
4 |
ch09 |
lambda-simple |
✅ |
✅ |
✅ |
✅ |
stack run simple-lambda |
5 |
ch11 |
lambda-fullsimple |
✅ |
✅ |
✅ |
✅ |
stack run fullsimple-lambda |
6 |
ch19 |
featherweight-java |
✅ |
✅ |
🚧 |
✅ |
stack run fj |
7 |
ch22 |
recon |
🚧 |
✅ |
🚧 |
✅ |
🚧 |
8 |
ch23 |
systemf |
🚧 |
🚧 |
🚧 |
✅ |
🚧 |
Fig |
System Name |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
3-1 |
Booleans (B) |
✅ |
✅ |
|
✅ |
✅ |
|
✅ |
✅ |
3-2 |
Arithmetic expressions (NB) |
|
✅ |
|
|
✅ |
|
✅ |
✅ |
5-3 |
Untyped lambda-calculus (λ) |
|
|
✅ |
|
|
|
|
|
8-1 |
Typing rules for booleans (B) |
|
|
|
✅ |
✅ |
|
✅ |
✅ |
8-2 |
Typing rules for numbers (NB) |
|
|
|
|
✅ |
|
✅ |
✅ |
9-1 |
Pure simply typed lambda-calculus (λ->) |
|
|
|
✅ |
✅ |
|
✅ |
✅ |
11-1 |
Uninterpreted base types |
|
|
|
|
|
|
|
|
11-2 |
Unit type |
|
|
|
|
✅ |
|
|
|
11-3 |
Ascription |
|
|
|
|
✅ |
|
|
|
11-4 |
Let binding |
|
|
|
|
✅ |
|
|
|
11-5 |
Pairs |
|
|
|
|
✅ |
|
|
|
11-6 |
Tuples |
|
|
|
|
✅ |
|
|
|
11-7 |
Records |
|
|
|
|
✅ |
|
|
|
11-8 |
(Untyped) record patterns |
|
|
|
|
✅ |
|
|
|
11-9 |
Sums |
|
|
|
|
✅ |
|
|
|
11-10 |
Sums (with unique typing) |
|
|
|
|
🚧 |
|
|
|
11-11 |
Variants |
|
|
|
|
🚧 |
|
|
|
11-12 |
General recursion |
|
|
|
|
🚧 |
|
✅ |
✅ |
11-13 |
Lists |
|
|
|
|
🚧 |
|
|
✅ |
13-1 |
References |
|
|
|
|
|
|
|
|
14-1 |
Errors |
|
|
|
|
|
|
|
|
14-2 |
Error handling |
|
|
|
|
|
|
|
|
14-3 |
Exceptions carrying values |
|
|
|
|
|
|
|
|
15-1 |
Simply typed lambda-calculus with subtyping (λ<:) |
|
|
|
|
|
|
|
|
15-2 |
Records (same as Figure 11-7) |
|
|
|
|
|
|
|
|
15-3 |
Records and subtyping |
|
|
|
|
|
|
|
|
15-4 |
Bottom type |
|
|
|
|
|
|
|
|
15-5 |
Variants and subtyping |
|
|
|
|
|
|
|
|
16-1 |
Subtype relation with records (compact version) |
|
|
|
|
|
|
|
|
16-2 |
Algorithmic subtyping |
|
|
|
|
|
|
|
|
16-3 |
Algorithmic typing |
|
|
|
|
|
|
|
|
19-1 |
Featherweight Java (syntax and subtyping) |
|
|
|
|
|
✅ |
|
|
19-2 |
Featherweight Java (auxiliary definitions) |
|
|
|
|
|
✅ |
|
|
19-3 |
Featherweight Java (evaluation) |
|
|
|
|
|
✅ |
|
|
19-4 |
Featherweight Java (typing) |
|
|
|
|
|
🚧 |
|
|
20-1 |
Iso-recursive types (λμ) |
|
|
|
|
|
|
|
|
22-1 |
Constraint typing rules |
|
|
|
|
|
|
✅ |
|
22-2 |
Unification algorithm |
|
|
|
|
|
|
✅ |
|
23-1 |
Polymorphic lambda-calculus (System F) |
|
|
|
|
|
|
|
✅ |
24-1 |
Existential types |
|
|
|
|
|
|
|
|
26-1 |
Bounded quantification (kernel F<:) |
|
|
|
|
|
|
|
|
26-2 |
"Full" bounded quantification |
|
|
|
|
|
|
|
|
26-3 |
Bounded existential quantification (kernel variant) |
|
|
|
|
|
|
|
|
28-1 |
Exposure Algorithm for F<: |
|
|
|
|
|
|
|
|
28-2 |
Algorithmic typing for F<: |
|
|
|
|
|
|
|
|
28-3 |
Algorithmic subtyping for kernel F<: |
|
|
|
|
|
|
|
|
28-4 |
Algorithmic subtyping for full F<: |
|
|
|
|
|
|
|
|
28-5 |
Join and meet algorithms for kernel F<: |
|
|
|
|
|
|
|
|
29-1 |
Type operators and kinding (λω) |
|
|
|
|
|
|
|
|
30-1 |
Higher-order polymorphic lambda-calculus (Fω) |
|
|
|
|
|
|
|
|
30-2 |
Higher-order existential types |
|
|
|
|
|
|
|
|
30-3 |
Parallel reduction on types |
|
|
|
|
|
|
|
|
32-1 |
Polymorphic update |
|
|
|
|
|
|
|
|
# build
$ stack build --fast --file-watch --ghc-options "-j4 +RTS -A128m -n2m -qg -RTS"
# test
$ stack test --fast --file-watch
## generate haddock document
$ stack clean && stack haddock
## benchmark
$ stack bench --benchmark-arguments "--small"
# pedantic
$ stack clean && stack test --fast --pedantic --file-watch --no-run-tests
# hlint
$ make lint
# format
$ make fmt
$ make cabal-fmt
Japanese book information
型システム入門 プログラミング言語と型の理論