Appendix D
Index

Emboldened terms indicate where a term has been defined in the text. A term starting with an uppercase character generally refers to an identifier in the syntactic description or to a predefined function or operator in the library.

\

\ 19, 113

A

abort 27

abstract data type 10, 54

predefined 43

AbstractTypeDef 54, 115

actual node-id 3

algebraic data type 45

algebraic data type definition 47

AlgebraicTypeDef 45, 47, 48, 49, 94, 115

anonymous node variable 16

AnyChar 32, 117, 119

Application 18, 113

arity of a function 26, 27

array 31, 38, 39, 42

comprehension 40

generator 35

index 40

index 38

selection 42

Array 39, 114

ArrayDenotation 39, 114

ArrayExpr 35, 40, 114

ArrayIndex 42, 114

ArrayPattern 42, 113

ArraySelection 42, 114

ArrayType 38, 116

ArrayUpdate 40, 114

arrow type 43

ArrowType 43

ASCII 31

B

basic type 31, 32

BasicType 31, 115

BasicValue 31, 113

BasicValuePattern 32, 113

block structure 20

Bool 31, 32, 120

BoolDenotation 32, 117

BooleanExpr 35, 112

boxing 106

BrackGraph 18, 113

BrackPattern 16, 112

BrackType 26, 28, 29, 45, 48, 91, 94, 115

C

CAF 108

cartesian product 26, 43

case 20, 114, 120

case expression 20

CaseAltDef 20, 114

CaseExpr 20, 114

Char 31, 120

Char 32

CharDel 32, 33, 117

CharDenotation 32, 117

CharsDenotation 32, 33, 117

class 58, 63, 116, 120

enumeration type 35

ClassContext 59, 112

ClassDef 116

ClassMemberDef 58, 116

ClassName 5, 117

CleanProgram 7, 111

code 13, 120

Comment 119

conditional expression 20

console mode 7

constant

global 9

local 9

Constant Applicative Form 108

constant value 32, 45

Constructor 18, 113

constructor symbol 1

ConstructorDef 45, 47, 48, 49, 94, 115

ConstructorName 5, 117

context

lazy 106

strict 106

contractum 1

corresponding module 6

curried application 27

curried constructor application 46

curried type 43

currying 18

cyclic graph 24

D

data constructor 16, 45, 47

data structure 45

DataRoot 4

decimal number 31, 117

default 121

DefDefinition 10, 111

definition 7, 111, 120

global 9

local 9

definition module 6, 10, 54

DefinitionModule 7, 111

DefOfFunction 15, 112

DefOfMacro 108, 115

depending module 11

dictionary 57

Digit 6

directed arc 1

DotDotexpression 34, 114

E

E. 47, 48

enumeration type 35

existentially quantified variable 47, 48

ExplicitImportDef 11, 112

export 120

export 116

expression

initial 1

F

False 32, 117

field name 50, 52, 53

FieldName 5, 117

File 120

Fix 45, 115

Fix 26

fixity 16, 19, 27

flat type 65

foreign function 12

formal argument 16, 19

formal node-id 3

from 11, 112, 120

function 1

alternative 15

arity of a 27

constant 24

curried application of a 27

definition 15

global 9

local 9

partial 1, 17, 27

total 27

Function 18, 112

Function 15

function definition 1

function object 43

function symbol 1

function type 26

functional array update 40

functional record update 52

functional reduction strategy 2

FunctionAltDef 15, 112

FunctionBody 15, 112

FunctionDef 15, 112

FunctionDef 26

FunctionName 5, 116

FunctionType 26, 28, 29, 59, 112

FunctionTypeDef 26, 112

FunnyId 6, 117

G

garbage collection 108

garbage collector 25

generator

array 33

list 35

Generator 35, 114

Generators 35, 114

global definition 9

Global definition 10

global graph 4

global graph definition 108

global scope 11

Gofer ii

graph 1

Graph 4

graph definition 24

graph rewrite rule 1, 15

GraphDef 24, 107, 112

GraphExpr 18, 113

GraphPattern 16, 46, 113

GraphVariable 18, 113

guard 17, 35

nested 18

guard 15

Guard 17, 35, 112

guarded function body 15

H

head normal form 8

hexadecimal number 31, 117

HexDigit 32, 117

Hilt B.V. viii

Hindley 45

Hugs ii

I

I/O library i, 8

IdChar 6, 117

identifier 6

Identifier 119

if 120

if 20, 114

ImplDefinition 8, 111

implementation 7, 111

implementation 120

ImplementationModule 7, 111

implicit import.;ib.import

implicit 12

ImplicitImportDef 12, 112

import 12, 112, 120

import statement 11

ImportDef 11, 112

Imports 11, 112

in 120

in 21, 114

infix 26, 45, 46, 120

infix position 16, 46

infixl 26, 45, 46, 115, 120

infixr 26, 45, 115, 120

Initial 3, 4

initial expression 7, 8

instance 58, 64, 70, 72, 75, 116, 120, 121

Int 31, 32, 115, 120

IntDenotation 31, 117

IntegerExpr 42, 114

K

keyword 120

L

LambdaAbstr 19, 113

lay-out rule 9

lazy context 106

lazy evaluation 105

lazy semantics 49

left hand-side of a graph 1

let 21, 23, 112, 114

let // begin of let expression 120

let! 23, 112

LetBeforeExpression 23, 112

LetExpresssion 21, 114

Lexeme 119

LexProgram 119

LGraphExpr 33, 114

LGraphPattern 36, 113

list 32, 36

List 33, 114

list list generator 35

ListDenotation 33, 114

ListExpr 35, 114

ListPattern 36, 113

ListType 33, 115

Literal 119

local definition 9

LocalDef 21, 22, 112

LocalFunctionAltDefs 21, 112

LocalFunctionDefs 22, 112

LowerCaseChar 6, 117

LowerCaseId 5, 117

M

macro

global 9

local 9

macro definition 108

MacroDef 108, 115

MacroFixityDef 108, 115

MacroName 5, 117

main module 7

Milner 45

Miranda ii

mode

console 7

module 7, 111, 120

corresponding 6

definition 6

depending 11

implementation 6

pass-through 12

Module 7, 111

ModuleName 5, 116

N

name space 120

name spaces 6

nested guards 18

nested scope 6

node 1

node variable 16

anonymous 17

node-id 1

actual 3

applied 1

formal 3

node-id variable 16

node-identifier 1

normal form 2

O

object oriented programming 51

octal number 31, 117

OctDigit 32, 117

of 20, 114, 120

operator 16, 19, 27

constructor 46

Operator 113

otherwise 17

overloaded 58

overloading 6

P

partial function 1, 17, 27

partial match 2

pass-through module 12

pattern 1, 16

constructor 46

record 26

Pattern 16, 112

pattern match 17

pattern variable 16

PatternVariable 16, 113

polymorphic algebraic data type 45

Prec 45, 115

Prec 26

precedence 27

precedence 16, 19

PredefAbstrType 44, 116

program 1

program graph 1

projection function 25

Q

Qualifier 35, 114

QuantifiedVariables 26, 28, 45, 46, 47, 48, 94, 115

R

Real 31, 32, 120

RealDenotation 32, 117

recompilation 10

record 52, 53

Record 52, 114

record pattern 26

record selection 53

record type 50

RecordDenotation 52, 114

RecordExpr 52, 114

RecordPattern 53, 113

RecordSelection 53, 114

RecordTypeDef 51, 115

RecordUpdate 52, 114

redex 1

redirection 1

redirection of a node 2

reducer 2

reducible expression 1

reduct 1

reduction strategy 2

reference 1

ReservedChar 32, 117

ReservedKeywordOrSymbol = 120

rewrite of a redex 1

rewrite rules

comparing 1

right hand-side of a graph 1

root normal form 2, 8

root stable form 8

RootExpression 18, 112

rule

alternative 15

rule alternative 17

S

scope 6, 9, 20, 108

nested 6

surrounding 6

selection

by field name 50

by index 39

by position 50

Selection 40, 42, 52, 53, 114

Selection of a Record Field 53

Selection of an Array Element 42

selector 25

Selector 25, 35, 112, 114

selector variable 19, 25

SelectorVariable 5, 117

sharing 24

sharing analysis 96

Sign 32, 117

SimpleType 115

SML ii

Special 32, 117

SpecialChar 6, 117

Start 3, 4, 7

start rule 3

StartNode 4

Strict 37, 49, 107, 115

strict context 106

strict semantics 49

StringDel 32, 39, 117

StringDenotation 39, 117

strong root normal form 2

strong type system 45

sub-graph 2

sub-pattern 46

surrounding scope 6

symbol 1, 120

arguments of a 1

synonym type 54

SynonymTypeDef 54, 115

system 7, 111, 120

system definition module 12

system implementation module 12

T

Term Graph Rewriting 1

total function 27

tree 1

True 32, 117

tuple 37, 38

Tuple 37, 114

TuplePattern 38, 113

TupleType 37, 116

type

abstract data 54

algebraic data 45

array 38

arrow 43

basic 31

constructor

lazy array 43, 116

list 43, 116

strict array 43, 116

unboxed array 43, 116

context 58

curried 43

existential 48

flat 65

global 9

inferred 26

list 32

of a function 26

of partial function 27

record 50

synonym 54

tuple 37

variable 45

Type 26, 28, 29, 31, 91, 115

type class 58

definition of 58

member of 58

type specification 120

type variable 45

TypeClassDef 58, 63, 116

TypeClassInstanceDef 58, 64, 70, 72, 75, 116

TypeClassInstanceExportDef 116

TypeConstructor 45, 94

TypeDef 115

TypeDef 45

TypeLhs 45, 94, 115

TypeName 5, 117

TypeVariable 5, 117

U

unboxing 106

uniqueness type attribute 91

UniqueTypeVariable 5, 117

UnqTypeAttrib 91, 94, 115

UnqTypeUnEqualities 59, 112

update of a record

destructive 53

UpperCaseChar 6, 117

UpperCaseId 5, 117

V

variable 19

existentially quantified 47

node-id 16

selector 19, 25

type 45

Variable 5, 117

W

where 21, 58, 64, 112, 116, 120

where block 21

Whitespace 119

wildcard 16, 25

with 22, 112, 120

with block 22

world

abstract 8

concrete physical 8

World 7, 43, 120

world mode 8

Z

ZF-expression 33, 35, 114

1 Note that it is very natural in Clean to speak about references due to the underlying graph rewriting semantics of the language: it is always clear when objects are being shared or when cyclic structures are being created.