Index

A-translation, 1
abstract syntax, 2, 3
alpha-equivalence, 4
atomic tuples, 5
axiomatic semantics, 6

beta-equivalence, see alsobeta-reduction, 8
beta-reduction, 9
bound occurrence, see occurrence, bound
boxed values, 11

call-by-name, 12, 13
call-by-need, 14
call-by-reference, 15
call-by-value, 16
capture, 17, 18
capture-avoiding substitution, 19, 20
classes, 21
closed expression, 22
closure, 23
closure conversion, 24
compilation, 25
concrete syntax, 26, 27
congruence, 28
control operations, 29
curried function, 30
cyclical store, 31

D, 32
    operational semantics, 33
    syntax, 34
        abstract, 35
        concrete, 36
D, 37
DDK, 38
    source code, 39
    usage, 40
denotational semantics, 41
deterministic languages, 42, 43
dispatch, 44
DOB, 45
    interpreter for, 46
    syntax
        abstract, 47
        concrete, 48
    translating to DSR, 49
domain theory, 50
DR, 51
DS, 52
    interpreter, 53
DSR, 54
DSR, 55
DV, 56
DX, 57
dynamic dispatch, 58, 59

ED, 60
environment-based interpreters, see interpreters, environment-based
equational inference, 62
equational types, see types, equational
equivalence, see operational equivalence
eta-conversion, 65
eta-equivalence, 66
exceptions, 67
explicit environment interpreter, 68

faithful implementation, 69, 70
flow analysis, 71
freezing, see alsothawing, 73
function hoisting, 74

garbage collection, 75, 76
generic types, 77

Haskell, 78

information hiding, 79
inheritance, 80
interpreters
    environment-based, 81
    writing using DDK, 82

l-value, see alsor-value, 84
lambda-calculus, 85
lazy evaluation, 86
lists
    encoding in D, 87
logical combinators, 88
loops, 89

metacircular interpreter, 90
metavariables, 91

nonlocal variable, 92
normalizing languages, 93, 94, 95

object polymorphism, 96, 97, 98
    relation to record polymorphism, 99
objects, 100
    encoding as records, 101
    encoding in DSR, 102
occurrence, 103
    bound, 104
    free, 105
operational equivalence, 106
operational semantics, 107, 108
    definition, 109

pairs, see tuples
parametric polymorphism, 111
partial recursive function, 112
PED, 113
polymorphism, 114
    on objects, see object polymorphism
    on records, see record polymorphism
primitive objects, 117
principal type, 118
program context, 119
proof, 120
proof system, 121

r-value, see alsol-value, 123
record polymorphism, 124, 125
records, 126
recursion
    encoding in D, 127
reflexivity, 128
renaming substitution, see capture-avoiding substitution
Return, 130
runtime environment, 131
Russell’s Paradox, 132

self-application encoding, 133
semantics, 134
sequencing, 135
side-effects, 136, 137
state, 138
static fields, 139
static methods, 140
STD, 141
store, 142, 143
stuck state, 144
subtype polymorphism, 145
subtyping, 146, 147
symmetry, 148
syntax, 149
syntax tree, 150

TD, 151
    type rules, 152
TDSRX, 153
thawing, see alsofreezing, 155
threading, 156
transitivity, 157
tuples, 158
    encoding in D, 159
Turing-complete, 160, 161, 162
tying the knot, 163
type assertion, 164
type checking, 165, 166
type environment, 167
type inference, 168, 169, 170
    and polymorphism, 171
    constrained, 172
type schema, 173
type soundness, 174
type systems, 175, 176
    dynamic, 177
    equational, 178
    overview of, 179
    static, 180
types, 181, 182
    checking, see type checking
    inference, see type inference

untyped languages, 185

variable capture, see capture
variable substitution, 187
    definition, 188
variants, 189
    polymorphism, 190

Y -combinator, 191, 192, 193