Skip to content
forked from waddlaw/TAPL

Types and Programming Languages (TAPL)

Notifications You must be signed in to change notification settings

helvm/TAPL-waddlaw

 
 

Repository files navigation

Types and Programming Languages

stack cabal lint format Netlify Status

Quick Start Guide

$ 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

Available Systems

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 🚧 🚧 🚧 🚧

Components

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

Development

# 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"

Other commands

# pedantic
$ stack clean && stack test --fast --pedantic --file-watch --no-run-tests

# hlint
$ make lint

# format
$ make fmt
$ make cabal-fmt

Japanese book information

型システム入門 プログラミング言語と型の理論

About

Types and Programming Languages (TAPL)

Topics

Resources

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Languages

  • Haskell 95.6%
  • TeX 4.1%
  • Makefile 0.3%