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
型システム入門 プログラミング言語と型の理論