| Preface | p. xiii |
| Introduction | p. 1 |
| The Von Neumann Bottleneck | p. 1 |
| Von Neumann Languages | p. 2 |
| Parallelism | p. 3 |
| Mathematics -- A Static Language | p. 4 |
| The Complexity of Programming Languages | p. 4 |
| Referential Transparency | p. 5 |
| Higher Order Functions | p. 6 |
| [lambda]-Calculus | p. 7 |
| Implementation of Functional Languages | p. 8 |
| Areas of Application | p. 8 |
| Summary | p. 9 |
| Introduction to Functional Programs | p. 11 |
| Getting Started | p. 11 |
| Names | p. 13 |
| Functions | p. 14 |
| Scope | p. 15 |
| Definition by Cases | p. 18 |
| Algorithms | p. 18 |
| Data Types | p. 19 |
| Guards | p. 21 |
| Characters | p. 22 |
| Lists | p. 23 |
| Constructing Lists | p. 24 |
| Selection | p. 25 |
| Pattern Matching | p. 26 |
| Tuples | p. 27 |
| Show | p. 28 |
| Conditionals | p. 28 |
| Modules and the Interactive Environment | p. 30 |
| Miscellaneous Points | p. 31 |
| Comments | p. 31 |
| Identifiers and Operators | p. 31 |
| Layout | p. 31 |
| A few useful predeclared functions | p. 32 |
| Summary | p. 32 |
| Exercises | p. 32 |
| Techniques and Methods | p. 35 |
| Introduction | p. 35 |
| Recursive Functions | p. 35 |
| Completeness | p. 37 |
| Higher Order Functions | p. 39 |
| Syntax of Function Definitions | p. 40 |
| Simulation of a Stack | p. 41 |
| Modelling Conventional Programming | p. 44 |
| Non-Local Variables | p. 45 |
| Accumulating Results | p. 46 |
| Maps | p. 48 |
| Maps | p. 48 |
| Filters | p. 49 |
| Folds | p. 51 |
| List Comprehensions | p. 52 |
| Translation to simpler Haskell | p. 54 |
| Summary | p. 55 |
| Exercises | p. 55 |
| Types | p. 59 |
| Introduction | p. 59 |
| Type Operators | p. 60 |
| Polymorphic Types | p. 61 |
| New Type Names | p. 62 |
| Algebraic Types | p. 62 |
| Pattern Matching | p. 65 |
| Abstract Types | p. 66 |
| Arrays | p. 67 |
| Type Inference | p. 68 |
| Overloading | p. 70 |
| Laws | p. 73 |
| Summary | p. 75 |
| Exercises | p. 76 |
| Lambda Calculus | p. 79 |
| Introduction | p. 79 |
| Abstraction | p. 79 |
| Reduction | p. 81 |
| [lambda]-Expressions | p. 82 |
| The Dangers of Substitution | p. 83 |
| Model of a Test for Freedom | p. 85 |
| Conversion | p. 87 |
| Normal Forms | p. 90 |
| Order of Reduction | p. 92 |
| Converting Haskell to [lambda]-Expressions | p. 95 |
| Expressions with definitions | p. 96 |
| Definitions within definitions | p. 97 |
| Simultaneous definitions and patterns | p. 97 |
| Recursion | p. 99 |
| Constructed Values | p. 103 |
| Patterns | p. 103 |
| Overloading | p. 104 |
| Summary | p. 105 |
| Exercises | p. 106 |
| Applicative Implementation | p. 109 |
| Introduction | p. 109 |
| The Secd Machine | p. 109 |
| Representation | p. 112 |
| Operational Semantics | p. 114 |
| An Improved Secd Machine | p. 122 |
| Secd2 Machine Code | p. 123 |
| Dropping Stitches | p. 128 |
| Further Improvements | p. 128 |
| Summary | p. 128 |
| Exercises | p. 129 |
| Lazy Evaluation | p. 131 |
| Introduction | p. 131 |
| Infinite Objects | p. 132 |
| Streams | p. 135 |
| Stream diagrams | p. 136 |
| List Comprehensions | p. 139 |
| Diagonalisation | p. 139 |
| Input/output | p. 140 |
| Irrefutable Patterns | p. 144 |
| Modularity | p. 144 |
| Memo Functions | p. 146 |
| Summary | p. 147 |
| Exercises | p. 147 |
| Implementation of Lazy Evaluation | p. 149 |
| Introduction | p. 149 |
| Lazy Evaluation | p. 150 |
| Adapting the Secd Machine | p. 151 |
| Graph Reduction | p. 152 |
| Turner's Combinator Machine | p. 153 |
| Combinators | p. 154 |
| Translation of Haskell to Combinators | p. 154 |
| Interpreting | p. 158 |
| Book-keeping | p. 161 |
| The G-Machine | p. 162 |
| Transformation to Super-Combinators | p. 163 |
| Programs for the G-Machine | p. 164 |
| Strictness Analysis | p. 168 |
| Further Developments | p. 170 |
| Summary | p. 170 |
| Exercises | p. 170 |
| Correctness | p. 173 |
| Introduction | p. 173 |
| Mathematical Induction | p. 174 |
| Induction on Lists | p. 177 |
| Structural Induction | p. 178 |
| Induction on Functions | p. 180 |
| Approximation | p. 180 |
| Chains of Approximations | p. 182 |
| Fixed Point Induction | p. 184 |
| Practical Use of Fixed Point Induction | p. 185 |
| Summary | p. 187 |
| Exercises | p. 187 |
| Applicative Program Transformation | p. 189 |
| Introduction | p. 189 |
| Language Definition | p. 189 |
| Transformations in Compilers | p. 192 |
| Dependency Analysis | p. 192 |
| Transforming Pattern Matching | p. 194 |
| Systematic Transformation | p. 195 |
| Other Transformations | p. 198 |
| Summary | p. 198 |
| Exercises | p. 198 |
| Parallel Evaluation | p. 201 |
| Introduction | p. 201 |
| Eager Evaluation | p. 201 |
| Sparking New Tasks | p. 203 |
| States of Evaluation | p. 203 |
| Pools of Tasks | p. 204 |
| Parallel Projects | p. 204 |
| Alice | p. 204 |
| Grip | p. 205 |
| The [v-G] Machine | p. 205 |
| Monsoon | p. 205 |
| P-RISC | p. 205 |
| Other Projects | p. 206 |
| Star:Dust | p. 206 |
| Requirements | p. 206 |
| Machine Architecture | p. 207 |
| Star:Dust as a Parallel Processor | p. 207 |
| Executing Sub-tasks in Parallel | p. 209 |
| Evaluating Suspensions | p. 211 |
| Load Distribution | p. 211 |
| Summary | p. 211 |
| Bibliography | p. 213 |
| Predefined Haskell Operators | p. 227 |
| The Haskell Preludes | p. 229 |
| Prelude | p. 230 |
| PreludeBuiltin | p. 233 |
| PreludeCore | p. 235 |
| PreludeRatio | p. 242 |
| PreludeComplex | p. 243 |
| PreludeList | p. 245 |
| PreludeArray | p. 251 |
| PreludeText | p. 253 |
| PreludeIO | p. 258 |
| Haskell Syntax | p. 263 |
| Notational Conventions | p. 263 |
| Lexical Syntax | p. 264 |
| Layout | p. 266 |
| Context-Free Syntax | p. 267 |
| Interface Syntax | p. 271 |
| Haskell Class Structure | p. 273 |
| Index | p. 275 |
| Table of Contents provided by Syndetics. All Rights Reserved. |