100% found this document useful (7 votes)
194 views62 pages

Programming in Haskell 2nd Edition Graham Hutton 2024 Scribd Download

Hutton

Uploaded by

dwanembakyu39
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (7 votes)
194 views62 pages

Programming in Haskell 2nd Edition Graham Hutton 2024 Scribd Download

Hutton

Uploaded by

dwanembakyu39
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Download the full version of the textbook now at textbookfull.

com

Programming in Haskell 2nd Edition Graham


Hutton

https://textbookfull.com/product/programming-in-
haskell-2nd-edition-graham-hutton/

Explore and download more textbook at https://textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Programming in Haskell Second Edition, 5Th Printing


Edition Hutton

https://textbookfull.com/product/programming-in-haskell-second-
edition-5th-printing-edition-hutton/

textbookfull.com

Thinking with Types Type level Programming in Haskell


Sandy Maguire

https://textbookfull.com/product/thinking-with-types-type-level-
programming-in-haskell-sandy-maguire/

textbookfull.com

Haskell The Ultimate Beginner s Guide to Learn Haskell


Programming Step by Step 1st Edition Claudia Alves

https://textbookfull.com/product/haskell-the-ultimate-beginner-s-
guide-to-learn-haskell-programming-step-by-step-1st-edition-claudia-
alves/
textbookfull.com

Local Public Sector Reforms in Times of Crisis: National


Trajectories and International Comparisons 1st Edition
Sabine Kuhlmann
https://textbookfull.com/product/local-public-sector-reforms-in-times-
of-crisis-national-trajectories-and-international-comparisons-1st-
edition-sabine-kuhlmann/
textbookfull.com
Trino The Definitive Guide SQL at Any Scale on Any Storage
in Any Environment Matt Fuller Manfred Moser Martin
Traverso
https://textbookfull.com/product/trino-the-definitive-guide-sql-at-
any-scale-on-any-storage-in-any-environment-matt-fuller-manfred-moser-
martin-traverso/
textbookfull.com

ASAP 1st Edition Axie Oh

https://textbookfull.com/product/asap-1st-edition-axie-oh/

textbookfull.com

Financial mathematics for actuaries Second Edition Chan

https://textbookfull.com/product/financial-mathematics-for-actuaries-
second-edition-chan/

textbookfull.com

Routledge Handbook of Early Chinese History Paul R. Goldin


(Editor)

https://textbookfull.com/product/routledge-handbook-of-early-chinese-
history-paul-r-goldin-editor/

textbookfull.com

Differential Equation Solutions With MATLAB Fundamentals


and Numerical Implementations De Gruyter STEM Dingyu Xue

https://textbookfull.com/product/differential-equation-solutions-with-
matlab-fundamentals-and-numerical-implementations-de-gruyter-stem-
dingyu-xue/
textbookfull.com
Sexuality Education and New Materialism: Queer Things
Louisa Allen

https://textbookfull.com/product/sexuality-education-and-new-
materialism-queer-things-louisa-allen/

textbookfull.com
Programming in Haskell
Second Edition
Haskell is a purely functional language that allows programmers to rapidly develop clear, concise and
correct software. The language has grown in popularity in recent years, both in teaching and in industry.
This book is based on the author’s experience of teaching Haskell for more than 20 years. All concepts
are explained from first principles and no programming experience is required, making this book
accessible to a broad spectrum of readers. While Part I focuses on basic concepts, Part II introduces the
reader to more advanced topics.
This new edition has been extensively updated and expanded to include recent and more advanced
features of Haskell, new examples and exercises, selected solutions, and freely downloadable lecture
slides and code. The presentation is clean and simple, while also being fully compliant with the latest
version of the language, including recent changes concerning applicative, monadic, foldable and
traversable types.
GRAHAM HUTTON is Professor of Computer Science at the University of Nottingham. He has taught
Haskell to thousands of students and received numerous best lecturer awards. Hutton has served as an
editor of the Journal of Functional Programming, chair of the Haskell Symposium and the International
Conference on Functional Programming, vice-chair of the ACM Special Interest Group on Programming
Languages, and he is an ACM Distinguished Scientist.
Programming in Haskell
Second Edition

GRAHAM HUTTON
University of Nottingham
University Printing House, Cambridge CB2 8BS, United Kingdom

One Liberty Plaza, 20th Floor, New York, NY 10006, USA


477 Williamstown Road, Port Melbourne, VIC 3207, Australia
4843/24, 2nd Floor, Ansari Road, Daryaganj, Delhi - 110002, India
79 Anson Road, #06-04/06, Singapore 079906

Cambridge University Press is part of the University of Cambridge.

It furthers the University’s mission by disseminating knowledge in the pursuit of education, learning, and research at the highest international
levels of excellence.

www.cambridge.org
Information on this title: www.cambridge.org/9781316626221
10.1017/9781316784099

© Graham Hutton 2007, 2016

This publication is in copyright. Subject to statutory exception and to the provisions of relevant collective licensing agreements, no reproduction
of any part may take place without the written permission of Cambridge University Press.

First published 2007


Second edition 2016

Printed in the United Kingdom by Clays, St Ives plc in 2016

A catalogue record for this publication is available from the British Library

ISBN 978-1-316-62622-1 Paperback

Cambridge University Press has no responsibility for the persistence or accuracy of URLs for external or third-party Internet Web sites
referred to in this publication, and does not guarantee that any content on such Web sites is, or will remain, accurate or appropriate.
For Annette, Callum and Tom
Contents

Foreword
Preface

Part I Basic Concepts


1 Introduction
1.1 Functions
1.2 Functional programming
1.3 Features of Haskell
1.4 Historical background
1.5 A taste of Haskell
1.6 Chapter remarks
1.7 Exercises

2 First steps
2.1 Glasgow Haskell Compiler
2.2 Installing and starting
2.3 Standard prelude
2.4 Function application
2.5 Haskell scripts
2.6 Chapter remarks
2.7 Exercises

3 Types and classes


3.1 Basic concepts
3.2 Basic types
3.3 List types
3.4 Tuple types
3.5 Function types
3.6 Curried functions
3.7 Polymorphic types
3.8 Overloaded types
3.9 Basic classes
3.10 Chapter remarks
3.11 Exercises
4 Defining functions
4.1 New from old
4.2 Conditional expressions
4.3 Guarded equations
4.4 Pattern matching
4.5 Lambda expressions
4.6 Operator sections
4.7 Chapter remarks
4.8 Exercises

5 List comprehensions
5.1 Basic concepts
5.2 Guards
5.3 The zip function
5.4 String comprehensions
5.5 The Caesar cipher
5.6 Chapter remarks
5.7 Exercises

6 Recursive functions
6.1 Basic concepts
6.2 Recursion on lists
6.3 Multiple arguments
6.4 Multiple recursion
6.5 Mutual recursion
6.6 Advice on recursion
6.7 Chapter remarks
6.8 Exercises

7 Higher-order functions
7.1 Basic concepts
7.2 Processing lists
7.3 The foldr function
7.4 The foldl function
7.5 The composition operator
7.6 Binary string transmitter
7.7 Voting algorithms
7.8 Chapter remarks
7.9 Exercises

8 Declaring types and classes


8.1 Type declarations
8.2 Data declarations
8.3 Newtype declarations
8.4 Recursive types
8.5 Class and instance declarations
8.6 Tautology checker
8.7 Abstract machine
8.8 Chapter remarks
8.9 Exercises

9 The countdown problem


9.1 Introduction
9.2 Arithmetic operators
9.3 Numeric expressions
9.4 Combinatorial functions
9.5 Formalising the problem
9.6 Brute force solution
9.7 Performance testing
9.8 Combining generation and evaluation
9.9 Exploiting algebraic properties
9.10 Chapter remarks
9.11 Exercises

Part II Going Further


10 Interactive programming
10.1 The problem
10.2 The solution
10.3 Basic actions
10.4 Sequencing
10.5 Derived primitives
10.6 Hangman
10.7 Nim
10.8 Life
10.9 Chapter remarks
10.10 Exercises

11 Unbeatable tic-tac-toe
11.1 Introduction
11.2 Basic declarations
11.3 Grid utilities
11.4 Displaying a grid
11.5 Making a move
11.6 Reading a number
11.7 Human vs human
11.8 Game trees
11.9 Pruning the tree
11.10 Minimax algorithm
11.11 Human vs computer
11.12 Chapter remarks
11.13 Exercises

12 Monads and more


12.1 Functors
12.2 Applicatives
12.3 Monads
12.4 Chapter remarks
12.5 Exercises

13 Monadic parsing
13.1 What is a parser?
13.2 Parsers as functions
13.3 Basic definitions
13.4 Sequencing parsers
13.5 Making choices
13.6 Derived primitives
13.7 Handling spacing
13.8 Arithmetic expressions
13.9 Calculator
13.10 Chapter remarks
13.11 Exercises

14 Foldables and friends


14.1 Monoids
14.2 Foldables
14.3 Traversables
14.4 Chapter remarks
14.5 Exercises

15 Lazy evaluation
15.1 Introduction
15.2 Evaluation strategies
15.3 Termination
15.4 Number of reductions
15.5 Infinite structures
15.6 Modular programming
15.7 Strict application
15.8 Chapter remarks
15.9 Exercises

16 Reasoning about programs


16.1 Equational reasoning
16.2 Reasoning about Haskell
16.3 Simple examples
16.4 Induction on numbers
16.5 Induction on lists
16.6 Making append vanish
16.7 Compiler correctness
16.8 Chapter remarks
16.9 Exercises

17 Calculating compilers
17.1 Introduction
17.2 Syntax and semantics
17.3 Adding a stack
17.4 Adding a continuation
17.5 Defunctionalising
17.6 Combining the steps
17.7 Chapter remarks
17.8 Exercises

Appendix A Selected solutions


A.1 Introduction
A.2 First steps
A.3 Types and classes
A.4 Defining functions
A.5 List comprehensions
A.6 Recursive functions
A.7 Higher-order functions
A.8 Declaring types and classes
A.9 The countdown problem
A.10 Interactive programming
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
A.11 Unbeatable tic-tac-toe
A.12 Monads and more
A.13 Monadic parsing
A.14 Foldables and friends
A.15 Lazy evaluation
A.16 Reasoning about programs
A.17 Calculating compilers

Appendix B Standard prelude


B.1 Basic classes
B.2 Booleans
B.3 Characters
B.4 Strings
B.5 Numbers
B.6 Tuples
B.7 Maybe
B.8 Lists
B.9 Functions
B.10 Input/output
B.11 Functors
B.12 Applicatives
B.13 Monads
B.14 Alternatives
B.15 MonadPlus
B.16 Monoids
B.17 Foldables
B.18 Traversables

Bibliography
Index
Foreword

It is nearly a century ago that Alonzo Church introduced the lambda calculus, and over half a century ago
that John McCarthy introduced Lisp, the world’s second oldest programming language and the first
functional language based on the lambda calculus. By now, every major programming language including
JavaScript, C++, Swift, Python, PHP, Visual Basic, Java, ... has support for lambda expressions or
anonymous higher-order functions.
As with any idea that becomes mainstream, inevitably the underlying foundations and principles get
watered down or forgotten. Lisp allowed mutation, yet today many confuse functions as first-class citizens
with immutability. At the same time, other effects such as exceptions, reflection, communication with the
outside world, and concurrency go unmentioned. Adding recursion in the form of feedback-loops to pure
combinational circuits lets us implement mutable state via flip-flops. Similarly, using one effect such as
concurrency or input/output we can simulate other effects such as mutability. John Hughes famously stated
in his classic paper Why Functional Programming Matters that we cannot make a language more
powerful by eliminating features. To that, we add that often we cannot even make a language less
powerful by removing features. In this book, Graham demonstrates convincingly that the true value of
functional programming lies in leveraging first-class functions to achieve compositionality and equational
reasoning. Or in Graham’s own words, “functional programming can be viewed as a style of programming
in which the basic method of computation is the application of functions to arguments”. These functions do
not necessarily have to be pure or statically typed in order to realise the simplicity, elegance, and
conciseness of expression that we get from the functional style.
While you can code like a functional hacker in a plethora of languages, a semantically pure and lazy,
and syntactically lean and terse language such as Haskell is still the best way to learn how to think like a
fundamentalist. Based upon decades of teaching experience, and backed by an impressive stream of
research papers, in this book Graham gently guides us through the whole gambit of key functional
programming concepts such as higher-order functions, recursion, list comprehensions, algebraic datatypes
and pattern matching. The book does not shy away from more advanced concepts. If you are still confused
by the n-th blog post that attempts to explain monads, you are in the right place. Gently starting with the IO
monad, Graham progresses from functors to applicatives using many concrete examples. By the time he
arrives at monads, every reader will feel that they themselves could have come up with the concept of a
monad as a generic pattern for composing functions with effects. The chapter on monadic parsers brings
everything together in a compelling use-case of parsing arithmetic expressions in the implementation of a
simple calculator.
This new edition not only adds many more concrete examples of concepts introduced throughout the
book, it also introduces the novel Haskell concepts of foldable and traversable types. Readers familiar
with object-oriented languages routinely use iterables and visitors to enumerate over all values in a
container, or respectively to traverse complex data structures. Haskell’s higher-kinded type classes allow
for a very concise and abstract treatment of these concepts by means of the Foldable and Traversable
classes. Last but not least, the final chapters of the book give an in-depth overview of lazy evaluation and
equational reasoning to prove and derive programs. The capstone chapter on calculating compilers
especially appeals to me because it touches a topic that has had my keen interest for many decades, ever
since my own PhD thesis on the same topic.
While there are plenty of alternative textbooks on Haskell in particular and functional programming in
general, Graham’s book is unique amongst all of these in that it uses Haskell simply as a tool for thought,
and never attempts to sell Haskell or functional programming as a silver bullet that magically solves all
programming problems. It focuses on elegant and concise expression of intent and thus makes a strong
case of how pure and lazy functional programming is an intelligible medium for efficiently reasoning
about algorithms at a high level of abstraction. The skills you acquire by studying this book will make you
a much better programmer no matter what language you use to actually program in. In the past decade,
using the first edition of this book I have taught many tens of thousands of students how to juggle with
code. With this new edition, I am looking forward to extending this streak for at least another 10 years.
Erik Meijer
Preface

What is this book?


Haskell is a purely functional language that allows programmers to rapidly develop software that is clear,
concise and correct. The book is aimed at a broad spectrum of readers who are interested in learning the
language, including professional programmers, university students and high-school students. However, no
programming experience is required or assumed, and all concepts are explained from first principles with
the aid of carefully chosen examples and exercises. Most of the material in the book should be accessible
to anyone over the age of around sixteen with a reasonable aptitude for scientific ideas.

How is it structured?
The book is divided into two parts. Part I introduces the basic concepts of pure programming in Haskell
and is structured around the core features of the language, such as types, functions, list comprehensions,
recursion and higher-order functions. Part II covers impure programming and a range of more advanced
topics, such as monads, parsing, foldable types, lazy evaluation and reasoning about programs. The book
contains many extended programming examples, and each chapter includes suggestions for further reading
and a series of exercises. The appendices provide solutions to selected exercises, and a summary of some
of the most commonly used definitions from the Haskell standard prelude.

What is its approach?


The book aims to teach the key concepts of Haskell in a clean and simple manner. As this is a textbook
rather than a reference manual we do not attempt to cover all aspects of the language and its libraries, and
we sometimes choose to define functions from first principles rather than using library functions. As the
book progresses the level of generality that is used is gradually increased. For example, in the beginning
most of the functions that are used are specialised to simple types, and later on we see how many
functions can be generalised to larger classes of types by exploiting particular features of Haskell.

How should it be read?


The basic material in part I can potentially be worked through fairly quickly, particularly for those with
some prior programming experience, but additional time and effort may be required to absorb some of
material in part II. Readers are recommended to work through all the material in part I, and then select
appropriate material from part II depending on their own interests. It is vital to write Haskell code for
yourself as you go along, as you can’t learn to program just by reading. Try out the examples from each
chapter as you proceed, and solve the exercises for each chapter before checking the solutions.

What’s new in this edition?


The book is an extensively revised and expanded version of the first edition. It has been extended with
new chapters that cover more advanced aspects of Haskell, new examples and exercises to further
reinforce the concepts being introduced, and solutions to selected exercises. The remaining material has
been completely reworked in response to changes in the language and feedback from readers. The new
edition uses the Glasgow Haskell Compiler (GHC), and is fully compatible with the latest version of the
language, including recent changes concerning applicative, monadic, foldable and traversable types.

How can it be used for teaching?


An introductory course might cover all of part I and a few selected topics from part II; my first-year
course covers chapters 1–9, 10 and 15. An advanced course might start with a refresher of part I, and
cover a selection of more advanced topics from part II; my second-year course focuses on chapters 12
and 16, and is taught interactively on the board. The website for the book provides a range of supporting
materials, including PowerPoint slides and Haskell code for the extended examples. Instructors can
obtain a large collection of exams and solutions based on material in the book from
[email protected].

Acknowledgements
I am grateful to the University of Nottingham for providing a sabbatical to produce this new edition;
Thorsten Altenkirch, Venanzio Capretta, Henrik Nilsson and other members of the FP lab for our many
enjoyable discussions; Iván Pérez Domínguez for useful comments on a number of chapters; the students
and tutors on all of my Haskell courses for their feedback; Clare Dennison, David Tranah and Abigail
Walkington at CUP for their editorial work; the GHC team for producing such a great compiler; and
finally, Catherine and Ian Hutton for getting me started in computing all those years ago.
Many thanks also to Ki Yung Ahn, Bob Davison, Philip Hölzenspies and Neil Mitchell for providing
detailed comments on the first edition, and to the following for pointing our errors and typos: Paul Brown,
Sergio Queiroz de Medeiros, David Duke, Robert Fabian, Ben Fleis, Robert Furber, Andrew Kish,
Tomoyas Kobayashi, Florian Larysch, Carlos Oroz, Douglas Philips, Bruce Turner, Gregor Ulm, Marco
Valtorta and Kazu Yamamoto. All of these comments have been taken into account when preparing the
new edition.
Graham Hutton
Part I

Basic Concepts
1
Introduction

In this chapter we set the stage for the rest of the book. We start by reviewing the notion of a function, then
introduce the concept of functional programming, summarise the main features of Haskell and its
historical background, and conclude with three small examples that give a taste of Haskell.

1.1 Functions
In Haskell, a function is a mapping that takes one or more arguments and produces a single result, and is
defined using an equation that gives a name for the function, a name for each of its arguments, and a body
that specifies how the result can be calculated in terms of the arguments.
For example, a function double that takes a number x as its argument, and produces the result x + x,
can be defined by the following equation:
double x = x + x

When a function is applied to actual arguments, the result is obtained by substituting these arguments
into the body of the function in place of the argument names. This process may immediately produce a
result that cannot be further simplified, such as a number. More commonly, however, the result will be an
expression containing other function applications, which must then be processed in the same way to
produce the final result.
For example, the result of the application double 3 of the function double to the number 3 can be
determined by the following calculation, in which each step is explained by a short comment in curly
parentheses:
double 3
= { applying double }
3 + 3
= { applying + }
6

Similarly, the result of the nested application double (double 2) in which the function double is
applied twice can be calculated as follows:
double (double 2)
= { applying the inner double }
double (2 + 2)
= { applying + }
double 4
= { applying double }
4 + 4
= { applying + }
8

Alternatively, the same result can also be calculated by starting with the outer application of the function
double rather than the inner:
double (double 2)
= { applying the outer double }
double 2 + double 2
= { applying the first double }
(2 + 2) + double 2
= { applying the first + }
4 + double 2
= { applying double }
4 + (2 + 2)
= { applying the second + }
4 + 4
= { applying + }
8

However, this approach requires two more steps than our original version, because the expression
double 2 is duplicated in the first step and hence simplified twice. In general, the order in which
functions are applied in a calculation does not affect the value of the final result, but it may affect the
number of steps required, and whether the calculation process terminates. These issues are explored in
more detail when we consider how expressions are evaluated in chapter 15.

1.2 Functional programming


What is functional programming? Opinions differ, and it is difficult to give a precise definition. Generally
speaking, however, functional programming can be viewed as a style of programming in which the basic
method of computation is the application of functions to arguments. In turn, a functional programming
language is one that supports and encourages the functional style.
To illustrate these ideas, let us consider the task of computing the sum of the integers (whole numbers)
between one and some larger number n. In many current programming languages, this would normally be
achieved using two integer variables whose values can be changed over time by means of the assignment
operator =, with one such variable used to accumulate the total, and the other used to count from 1 to n.
For example, in Java the following program computes the required sum using this approach:
int total = 0;
for (int count = 1; count <= n; count++)
total = total + count;

That is, we first initialise an integer variable total to zero, and then enter a loop that ranges an integer
variable count from 1 to n, adding the current value of the counter to the total each time round the loop.
In the above program, the basic method of computation is changing stored values, in the sense that
executing the program results in a sequence of assignments. For example, the case of n = 5 gives the
following sequence, in which the final value assigned to the variable total is the required sum:
total = 0;
count = 1;
total = 1;
count = 2;
total = 3;
count = 3;
total = 6;
count = 4;
total = 10;
count = 5;
total = 15;

In general, programming languages such as Java in which the basic method of computation is changing
stored values are called imperative languages, because programs in such languages are constructed from
imperative instructions that specify precisely how the computation should proceed.
Now let us consider computing the sum of the numbers between one and n using Haskell. This would
normally be achieved using two library functions, one called [..] that is used to produce the list of
numbers between 1 and n, and the other called sum that is used to produce the sum of this list:
sum [1..n]

In this program, the basic method of computation is applying functions to arguments, in the sense that
executing the program results in a sequence of applications. For example, the case of n = 5 gives the
following sequence, in which the final value in the sequence is the required sum:
sum [1..5]
= { applying [..] }
sum [1,2,3,4,5]
= { applying sum }
1 + 2 + 3 + 4 + 5
= { applying + }
15

Most imperative languages provide some form of support for programming with functions, so the
Haskell program sum [1..n] could be translated into such languages. However, many imperative
languages do not encourage programming in the functional style. For example, many such languages
discourage or prohibit functions from being stored in data structures such as lists, from constructing
intermediate structures such as the list of numbers in the above example, from taking functions as
arguments or producing functions as results, or from being defined in terms of themselves. In contrast,
Haskell imposes no such restrictions on how functions can be used, and provides a range of features to
make programming with functions both simple and powerful.

1.3 Features of Haskell


For reference, the main features of Haskell are listed below, along with particular chapters of this book
that give further details.
Concise programs (chapters 2 and chapters 4)
Due to the high-level nature of the functional style, programs written in Haskell are often much
more concise than programs written in other languages, as illustrated by the example in the
previous section. Moreover, the syntax of Haskell has been designed with concise programs in
mind, in particular by having few keywords, and by allowing indentation to be used to indicate
the structure of programs. Although it is difficult to make an objective comparison, Haskell
programs are often between two and ten times shorter than programs written in other languages.
Powerful type system (chapters 3 and chapters 8)
Most modern programming languages include some form of type system to detect incompatibility
errors, such as erroneously attempting to add a number and a character. Haskell has a type system
that usually requires little type information from the programmer, but allows a large class of
incompatibility errors in programs to be automatically detected prior to their execution, using a
sophisticated process called type inference. The Haskell type system is also more powerful than
most languages, supporting very general forms of polymorphism and overloading, and providing
a wide range of special purpose features concerning types.
List comprehensions (chapter 5)
One of the most common ways to structure and manipulate data in computing is using lists of
values. To this end, Haskell provides lists as a basic concept in the language, together with a
simple but powerful comprehension notation that constructs new lists by selecting and filtering
elements from one or more existing lists. Using the comprehension notation allows many common
functions on lists to be defined in a clear and concise manner, without the need for explicit
recursion.
Recursive functions (chapter 6)
Most programs involve some form of looping. In Haskell, the basic mechanism by which looping
is achieved is through recursive functions that are defined in terms of themselves. It can take
some time to get used to recursion, particularly for those with experience of programming in
other styles. But as we shall see, many computations have a simple and natural definition in
terms of recursive functions, especially when pattern matching and guards are used to separate
different cases into different equations.
Higher-order functions (chapter 7)
Haskell is a higher-order functional language, which means that functions can freely take
functions as arguments and produce functions as results. Using higher-order functions allows
common programming patterns, such as composing two functions, to be defined as functions
within the language itself. More generally, higher-order functions can be used to define domain-
specific languages within Haskell itself, such as for list processing, interactive programming,
and parsing.
Effectful functions (chapters 10 and chapters 12)
Functions in Haskell are pure functions that take all their inputs as arguments and produce all
their outputs as results. However, many programs require some formof side effect that would
appear to be at odds with purity, such as reading input from the keyboard, or writing output to the
screen, while the program is running. Haskell provides a uniform framework for programming
with effects, without compromising the purity of functions, based upon the use of monads and
applicatives.
Generic functions (chapters 12 and chapters 14)
Most languages allow functions to be defined that are generic over a range of simple types, such
as different forms of numbers. However, the Haskell type system also supports functions that are
generic over much richer kinds of structures. For example, the language provides a range of
library functions that can be used with any type that is functorial, applicative, monadic,
foldable, or traversable, and moreover, allows new structures and generic functions over them
to be defined.
Lazy evaluation (chapter 15)
Haskell programs are executed using a technique called lazy evaluation, which is based upon the
idea that no computation should be performed until its result is actually required. As well as
avoiding unnecessary computation, lazy evaluation ensures that programs terminate whenever
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
possible, encourages programming in a modular style using intermediate data structures, and
even allows programming with infinite structures.
Equational reasoning (chapters 16 and chapters 17)
Because programs in Haskell are pure functions, simple equational reasoning techniques can be
used to execute programs, to transform programs, to prove properties of programs, and even to
calculate programs directly from specifications of their intended behaviour. Equational reasoning
is particularly powerful when combined with the use of induction to reason about functions that
are defined using recursion.

1.4 Historical background


Many of the features of Haskell are not new, but were first introduced by other languages. To help place
Haskell in context, some of the key historical developments related to the language are briefly
summarised below:
In the 1930s, Alonzo Church developed the lambda calculus, a simple but powerful mathematical
theory of functions.
In the 1950s, John McCarthy developed Lisp (“LISt Processor”), generally regarded as being the
first functional programming language. Lisp had some influences from the lambda calculus, but still
retained the concept of variable assignment as a central feature of the language.
In the 1960s, Peter Landin developed ISWIM (“If you See What I Mean”), the first pure functional
programming language, based strongly on the lambda calculus and having no variable assignments.
In the 1970s, John Backus developed FP (“Functional Programming”), a functional programming
language that particularly emphasised the idea of higher-order functions and reasoning about
programs.
Also in the 1970s, Robin Milner and others developed ML (“Meta-Language”), the first of the
modern functional programming languages, which introduced the idea of polymorphic types and type
inference.
In the 1970s and 1980s, David Turner developed a number of lazy functional programming
languages, culminating in the commercially produced language Miranda (meaning “admirable”).
In 1987, an international committee of programming language researchers initiated the development
of Haskell (named after the logician Haskell Curry), a standard lazy functional programming
language.
In the 1990s, Philip Wadler and others developed the concept of type classes to support overloading,
and the use of monads to handle effects, two of the main innovative features of Haskell.
In 2003, the Haskell committee published the Haskell Report, which defined a long-awaited stable
version of the language.
In 2010, a revised and updated of the Haskell Report was published. Since then the language has
continued to evolve, in response to both new foundational developments and new practical
experience.
It is worthy of note that three of the above individuals — McCarthy, Backus, and Milner — have each
received the ACM Turing Award, which is generally regarded as being the computing equivalent of a
Nobel prize.
1.5 A taste of Haskell
We conclude this chapter with three small examples that give a taste of programming in Haskell. The
examples involve processing lists of values of different types, and illustrate different features of the
language.

Summing numbers
Recall the function sum used earlier in this chapter, which produces the sum of a list of numbers. In
Haskell, sum can be defined using two equations:
sum [] = 0
sum (n:ns) = n + sum ns

The first equation states that the sum of the empty list is zero, while the second states that the sum of any
non-empty list comprising a first number n and a remaining list of numbers ns is given by adding n and the
sum of ns. For example, the result of sum [1,2,3] can be calculated as follows:
sum [1,2,3]
= { applying sum }
1 + sum [2,3]
= { applying sum }
1 + (2 + sum [3])
= { applying sum }
1 + (2 + (3 + sum []))
= { applying sum }
1 + (2 + (3 + 0))
= { applying + }
6

Note that even though the function sum is defined in terms of itself and is hence recursive, it does not
loop forever. In particular, each application of sum reduces the length of the argument list by one, until the
list eventually becomes empty, at which point the recursion stops and the additions are performed.
Returning zero as the sum of the empty list is appropriate because zero is the identity for addition. That is,
0 + x = x and x + 0 = x for any number x.
In Haskell, every function has a type that specifies the nature of its arguments and results, which is
automatically inferred from the definition of the function. For example, the function sum defined above has
the following type:
Num a => [a] -> a

This type states that for any type a of numbers, sum is a function that maps a list of such numbers to a
single such number. Haskell supports many different types of numbers, including integers such as 123, and
floating-point numbers such as 3.14159. Hence, for example, sum could be applied to a list of integers, as
in the calculation above, or to a list of floating-point numbers.
Types provide useful information about the nature of functions, but, more importantly, their use allows
many errors in programs to be automatically detected prior to executing the programs themselves. In
particular, for every occurrence of function application in a program, a check is made that the type of the
actual arguments is compatible with the type of the function itself. For example, attempting to apply the
function sum to a list of characters would be reported as an error, because characters are not a type of
numbers.

Sorting values
Now let us consider a more sophisticated function concerning lists, which illustrates a number of other
aspects of Haskell. Suppose that we define a function called qsort by the following two equations:

In this definition, ++ is an operator that appends two lists together; for example, [1,2,3] ++ [4,5] =
[1,2,3,4,5]. In turn, where is a keyword that introduces local definitions, in this case a list smaller
comprising all elements a from the list xs that are less than or equal to x, together with a list larger
comprising all elements b from xs that are greater than x. For example, if x = 3 and xs = [5,1,4,2], then
smaller = [1,2] and larger = [5,4].
What does qsort actually do? First of all, we note that it has no effect on lists with a single element, in
the sense that qsort [x] = [x] for any x. It is easy to verify this property using a simple calculation:
qsort [x]
= { applying qsort }
qsort [] ++ [x] ++ qsort []
= { applying qsort }
[] ++ [x] ++ []
= { applying ++ }
[x]

In turn, we now work through the application of qsort to an example list, using the above property to
simplify the calculation:
qsort [3,5,1,4,2]
= { applying qsort }
qsort [1,2] ++ [3] ++ qsort [5,4]
= { applying qsort }
(qsort [] ++ [1] ++ qsort [2]) ++ [3]
++ (qsort [4] ++ [5] ++ qsort [])
= { applying qsort, above property}
([] ++ [1] ++ [2]) ++ [3] ++ ([4] ++ [5] ++ [])
= { applying ++ }
[1,2] ++ [3] ++ [4,5]
= { applying ++ }
[1,2,3,4,5]

In summary, qsort has sorted the example list into numerical order. More generally, this function
produces a sorted version of any list of numbers. The first equation for qsort states that the empty list is
already sorted, while the second states that any non-empty list can be sorted by inserting the first number
between the two lists that result from sorting the remaining numbers that are smaller and larger than
this number. This method of sorting is called quicksort, and is one of the best such methods known.
The above implementation of quicksort is an excellent example of the power of Haskell, being both
clear and concise. Moreover, the function qsort is also more general than might be expected, being
applicable not just with numbers, but with any type of ordered values. More precisely, the type
qsort :: Ord a => [a] -> [a]

states that, for any type a of ordered values, qsort is a function that maps between lists of such values.
Haskell supports many different types of ordered values, including numbers, single characters such as
’a’, and strings of characters such as "abcde". Hence, for example, the function qsort could also be
used to sort a list of characters, or a list of strings.

Sequencing actions
Our third and final example further emphasises the level of precision and generality that can be achieved
in Haskell. Consider a function called seqn that takes a list of input/output actions, such as reading or
writing a single character, performs each of these actions in sequence, and returns a list of resulting
values. In Haskell, this function can be defined as follows:

These two equations state that if the list of actions is empty we return the empty list of results, otherwise
we perform the first action in the list, then perform the remaining actions, and finally return the list of
results that were produced. For example, the expression seqn [getChar,getChar,getChar] reads
three characters from the keyboard using the action getChar that reads a single character, and returns a
list containing the three characters.
The interesting aspect of the function seqn is its type. One possible type that can inferred from the
above definition is the following:
seqn :: [IO a] -> IO [a]

This type states that seqn maps a list of IO (input/output) actions that produce results of some type a to a
single IO action that produces a list of such results, which captures the high-level behaviour of seqn in a
clear and concise manner. More importantly, however, the type also makes explicit that the function seqn
involves the side effect of performing input/output actions. Using types in this manner to keep a clear
distinction between functions that are pure and those that involve side effects is a central aspect of
Haskell, and brings important benefits in terms of both programming and reasoning.
In fact, the function seqn is more general than it may initially appear. In particular, the manner in which
the function is defined is not specific to the case of input/output actions, but is equally valid for other
forms of effects too. For example, it can also be used to sequence actions that may change stored values,
fail to succeed, write to a log file, and so on. This flexibility is captured in Haskell by means of the
following more general type:
seqn :: Monad m => [m a] -> m [a]

That is, for any monadic type m, of which IO is just one example, seqn maps a list of actions of type m a
into a single action that returns a list of values of type a. Being able to define generic functions such as
seqn that can be used with different kinds of effects is a key feature of Haskell.
1.6 Chapter remarks
The Haskell Report is freely available from http://www.haskell.org. More detailed historical
accounts of the development of functional languages in general, and Haskell in particular, are given in [1]
and [2].

1.7 Exercises
1. Give another possible calculation for the result of double (double 2).

2. Show that sum [x] = x for any number x.


3. Define a function product that produces the product of a list of numbers, and show using your
definition that product [2,3,4] = 24.
4. How should the definition of the function qsort be modified so that it produces a reverse sorted
version of a list?
5. What would be the effect of replacing <= by < in the original definition of qsort? Hint: consider
the example qsort [2,2,3,1,1].
Solutions to exercises 1–3 are given in appendix A.
Random documents with unrelated
content Scribd suggests to you:
Ellen Platt.

This letter irritated and annoyed Millie. Her hands were full enough
already without having Ellen's heart added to everything else. And
why need Ellen be so mysterious, warning her about people? That
was underhand. Did she suspect anybody she should speak out.
Millie walked about cautiously for the next few days lest she should
find herself alone with Ellen, when the woman looked so miserable
that her heart was touched, and one morning, meeting her in the
hall, she said:
"It was kind of you to write that note, Ellen. Of course we'll have a
walk one day."
Ellen stared at her under furious eyebrows. "If that's all you can
say," she exclaimed, "thank you for nothing. Catch me giving myself
away again," and brushed angrily past her. . . .
So on the morning after the theatricals down came the storm. It
began with the housekeeper, Mrs. Martin. Sitting under Eve Millie
examined the household books for the last fortnight.
"The butcher's very large," she observed.
"Honk!" Mrs. Martin remarked from some unprobed depths of an
outraged woman. She was a little creature with an upturned nose
and a grey complexion.
"Well it really is too large this time," said Millie. "Twenty pounds for a
fortnight even in these days——"
"Certingly," said Mrs. Martin, speaking very quickly and rising a little
on her toes. "Certingly if I'm charged with dishonesty, and it's
implied that I'm stealing the butcher's meat and deceiving my
mistress, who has always, so far as I know, trusted me and found no
fault at all and has indeed commented not once nor twice on my
being economical, but if so, well my notice is the thing that's
wanted, I suppose, and——"
"Not at all," said Millie, still very gently. "There's no question of any
one's dishonesty, Mrs. Martin. As you're housekeeper as well as cook
you must know better than any one else whether this is an unusual
amount or no. Perhaps it isn't. Perhaps——"
"I may have my faults," Mrs. Martin broke in, "there's few of us who
haven't, but dishonesty I've never before been accused of; although
the times are difficult and those who don't have to buy the things
themselves may imagine that meat costs nothing, and you can have
a joint every quarter of an hour without having to pay for it, still that
hasn't been my experience, and to be called a dishonest woman
after all my troubles and the things I've been through——"
"I never did call you a dishonest woman," said Millie. "Never for a
moment. I only want you to examine this book with me and see
whether we can't bring it down a little——"
"Dishonesty," pursued Mrs. Martin, rising still higher on her toes and
apparently addressing Eve, "is dishonesty and there's no way out of
it, either one's dishonest or one isn't and—if one is dishonest the
sooner one leaves and finds a place where one isn't the better for all
parties and the least said the sooner mended——"
"Would you mind," said Millie with an admirable patience, "just
casting your eye over this book and telling me what you think of it?
That's all I want really."
"Then I hope, Miss," said Mrs. Martin, "that you'll take back your
accusation that I shouldn't like to go back to the kitchen suffering
under, because I never have suffered patiently under such an
accusation and I never will."
"I made no accusation," said Millie. "If I hurt your feelings I'm sorry,
but do please let us get to work and look at this book together.
Time's short and there's so much to be done."
But Mrs. Martin was a woman of one idea at a time. "If you doubt
my character, Miss, please speak to Miss Platt about it, and if she
has a complaint well and good and I'll take her word for it, she
having known me a good deal longer than many people and not one
to rush to conclusions as some are perhaps with justice and perhaps
not."
Upon this particular morning Millie was to lose her temper upon
three separate occasions. This was the first occasion.
"That's enough, Mrs. Martin," she said sharply. "I did not call you
dishonest. I do not now. But as you seem incapable of looking at
this book I will show it to Miss Platt and she shall discuss it with you.
That's everything, thank you, good morning."
"Honk!" said Mrs. Martin. "Then if that's the way I'm to be treated
the only thing that's left for me to do is hand in my notice which I do
with the greatest of pleasure, and until you came, Miss, I should
never have dreamt of such a thing, being well suited, but such
treatment no human being can stand!"
"Very well then," said Millie, cold with anger. "If you feel you must
go, you must. I'm sorry but you must act as you feel."
Mrs. Martin turned round and marched towards the door muttering
to herself. Just before she reached it Victoria and Clarice entered.
Mrs. Martin looked at them, muttered something and departed
banging the door behind her.
Millie could see that Victoria was already upset, her large fat face
puckered into the expression of a baby who is not sure whether it
will cry or no. Clarice, her yellow hair untidy and her pink gown
trembling with unexpected little pieces of lace and flesh, was quite
plainly in a very bad temper.
"What's the matter with Mrs. Martin?" said Victoria, coming through
into the inner room. "She seems to be upset about something."
"She is," said Millie. "She's just given notice."
"Given notice!" cried Victoria. "Oh dear, oh dear! What shall we do?
Millie, how could you let her? She's been with us longer than any
servant we've had since father died and she cooks so well
considering everything. She knows our ways now and I've always
been so careful to give her everything she wanted. Oh Millie, how
could you? You really shouldn't have done it!"
"I didn't do it," said Millie. "She did it. I simply asked her to look at
the butcher's book for the last fortnight. It was disgracefully large.
She chose to be insulted and gave notice."
"Isn't that vexing?" cried Victoria. "I do think you might have
managed better, Millie. She isn't a woman who easily takes offence
either. She's taken such a real interest in us all and nothing's been
too much trouble for her!"
"Meanwhile," Millie said, "she's been robbing you right and left. You
know she has, Victoria. You as good as admitted it to me the other
day. Of course if you want to go on being plundered, Victoria, it's no
affair of mine. Only tell me so, and I shall know where I am."
"I don't think you ought to speak to me like that," said Victoria. "It's
not kind of you. I didn't quite expect that of you, Millie. You know
the troubles I have and I hoped you were going to help me with
them and not give me new ones."
"I'm not giving you new ones," Millie answered. "I'm trying to save
you. However——"
It was at this point that Clarice interrupted. "Now I hope at last,
Victoria," she said, "that your eyes are opened. It only supports
what I was saying downstairs. Miss Trenchard (Clarice had been
calling her Miss Trenchard for the last fortnight) may be clever and
attractive and certainly young men seem to think her so, but suited
to be your secretary she is not."
Millie got up from her seat. "Isn't this beginning to be rather
personal?" she said. "Hadn't we all better wait until we are a little
cooler?"
"No we had not," said Clarice, trembling with anger. "I'm glad this
occasion has come at last. I've been waiting for it for weeks. I'm not
one to be underhand and to say things behind people's backs that I
would not dare to say to their faces; I say just what I think. I know,
Miss Trenchard, that you despise me and look down upon me. Of
that I have nothing to say. It may be deserved or it may not. I am
here, however, to protect my sister. There are things that she is too
warm-hearted and kind-natured to see although they do go on right
under her very nose. There have been occasions before when I've
had to point circumstances out to her. I've never hesitated at what
was I thought my duty. I do not hesitate now. I tell you frankly, Miss
Trenchard, that I think your conduct during these last weeks has
been quite disgraceful. You have alienated all Victoria's best friends,
disturbed the servants and flirted with every young man that has
come into the house!"
This was the second occasion on which Millie lost her temper that
morning.
"Thank you," she said. "Now I know where I stand. But you'll
apologize please for that last insult before you leave this room."
"I will not! I will not!" cried Clarice.
"Oh dear, what shall I do?" interrupted Victoria. "I knew this was
going to be a terrible day the moment I got out of bed this morning.
Clarice, you really shouldn't say such things."
"I should! I should!" cried Clarice, stamping her foot. "She's ruined
everything since she came into the house. No one knows how I
worked at that horrible play and Bunny Baxter was beginning to be
so good, most amusing and knowing his part perfectly until she
came along. And then she turned his head and he fancies he's in
love with her and the whole thing goes to pieces. And I always said,
right away from the beginning, that we oughtn't to have Cissie
Marrow as prompter, she always loses her head and turns over two
pages at once—and now I've gone and made myself the laughing-
stock of London and shall never be able to act in public again!"
The sight of Clarice's despair touched Millie, and when the poor
woman turned from them and stood, facing the window, snuffling
into a handkerchief, her anger vanished as swiftly as it had come.
Besides what were they quarrelling about, three grown women?
Here was life passing and so much to be done and they could stand
and scream at one another like children in the nursery. Millie's
subconscious self seemed to be saying to her: "I stand outside you.
I obscure you. This is not real, but I am real and something behind
life is real. Laugh at this. It vanishes like smoke. This is not life." She
suddenly smiled; laughter irradiated all her face, shining in her eyes,
colouring her cheek.
"Clarice, I'm sorry. If I've been a pig to you all these weeks I surely
didn't mean to be. It hasn't been very easy—not through anybody's
fault but simply because I'm so inexperienced. I'm sure that I've
been very trying to all of you. But why should we squabble like this?
I don't know what's happened to all of us this year. We stood far
worse times during the War without losing our tempers, and we all
of us put up with one another. But now we all seem to get angry at
the slightest thing. I've noticed it everywhere. The little things now
are much harder to bear than the big things were in the War. Please
be friends, Clarice, and believe me that I didn't mean to hurt you."
At this sudden softening Clarice burst into louder sobbing and
nothing was to be heard but "Ouch! Ouch! Ouch!" proceeding from
the middle of the handkerchief.
All might now have been well had not Victoria most unfortunately
suddenly bethought herself of Mrs. Martin.
"All the same, Millie," she said. "It wasn't quite kindly of you to
speak to Clarice like that when you knew that she must be tired
after all the trouble she had with her acting, and I'm sure I thought
it went very nicely indeed although there was a little confusion in the
middle which I'm certain nobody noticed half as much as Clarice
thought they did. And I do wish, Millie, that you hadn't spoken to
Mrs. Martin like that. I simply don't know what we shall do without
her. We'll never get any one else as good. I'm sure she never spoke
to me rudely. She only wants careful handling. I do so detest registry
offices and seeing one woman worse than another. I do think you're
to blame, Millie!"
Whereupon Millie lost her temper for the third time that morning and
on this occasion very thoroughly indeed.
"All right," she said, "that finishes it. You can have my month's
notice, Victoria, as well as Mrs. Martin's—I've endured it as well as I
could and as long as I could. I've been nearly giving you notice a
hundred times. And before I do go let me just tell you that I think
you're the greatest coward, Victoria, that ever walked upon two feet.
How many secretaries have you had in the last two months? Dozens
I should fancy. And why? Because you never support them in
anything. You tell them to go and do a thing and then when they do
it desert them because some one else in the house disapproves. You
gave me authority over the servants, told me to dismiss them if they
weren't satisfactory, and then when at last I do dismiss one of them
you tell me I was wrong to do it. I try to bring this house into
something like order and then you upset me at every turn as though
you didn't want there to be any order at all. You aren't loyal,
Victoria, that's what's the matter with you—and until you are you'll
never get any one to stay with you. I'm going a month from to-day
and I wish you luck with your next selection."
She had sufficient time to perceive with satisfaction Victoria's
terrified stare and to hear the startled arrest of Clarice's sobs. She
had marched to the door, she had looked back upon them both, had
caught Victoria's "Millie! you can't——" The door was closed behind
her and she was out upon the silent sunlit staircase.
Breathless, agitated with a confusion of anger and penitence,
indignation and regret she ran downstairs and almost into the arms
of young Mr. Baxter. Oh! how glad she was to see him! Here at any
rate was a man—not one of these eternal women with their
morbidities and hysterias and scenes! His very smile, his engaging
youth and his air of humorous detachment were jewels beyond any
price to Millie just then.
"Why! What's the matter?" he cried.
"Oh, I don't know!" she answered. "I don't know whether I'm going
to laugh or cry or what I'm going to do! Oh, those women! Those
women! Bunny—take me somewhere. Do something with me. Out of
this. I'm off my head this morning."
"Come in here!" he said, drawing her with him towards a little poky
room on the right of the hall-door that was used indifferently as a
box-room, a writing-room and a room for Beppo to retire into when
he was waiting to pounce out upon a ring at the door. It was dirty,
littered with hat-boxes and feminine paraphernalia. An odious room,
nevertheless this morning the sun was shining with delight and
young Baxter knew that his moment had come.
He pushed Millie in before him, closed the door, flung his arms
around her and kissed her all over her face. She pulled herself away.
"You . . . You . . . What is the matter with every one this morning?"
He looked at her with eyes dancing with delight.
"I'm sorry. I ought to have warned you. You looked so lovely I
couldn't help myself. Millie, I adore you. I have done so ever since I
first met you. I love you. I love you. You must marry me. We'll be
happy for ever and ever."
There were so many things that Millie should have said. The simple
truth was that she had been in love with him for weeks and had no
other thought but that.
"We can't marry," she said at last feebly. "We're both very young.
We've got no money."
"Young!" said Bunny scornfully. "Why, I'm twenty-seven, and as to
money I'll soon make some. Millie, come here!"
She who had but now scolded the Miss Platts as though they were
school children went to him.
"See!" he put his hands on her shoulders staring into her eyes, "I
oughtn't to have kissed you like that just now. It wasn't right. I'm
going to begin properly now. Dear Millicent, will you marry me?"
"What will your mother——?"
"Dear Millicent, will you marry me?"
"But if you haven't any money?"
"Dear Millicent, will you marry me?"
"Yes."
She suddenly put her arms around him and hugged him as though
he had been a favourite puppy or an infant of very tender years. She
felt about him like that. Then they simply sat hand in hand on a pile
of packing-cases in the corner of the room. He suddenly put his
hand up and stroked her hair.
"Funny!" she said. "Some one did that the other day and I hated it."
"Who dared?"
She laughed. "No one you need be jealous of."
Poor Ellen! She felt now that she loved all the world, Clarice and
Mrs. Martin included.
"You won't mind if you keep our engagement dark for a week or
two?" he asked.
"Why?" She turned round and looked at him.
"Oh! I don't know. It would be more fun I think."
"I don't think it would. I hate concealing things."
"Oh, darling Millie, please—only for a very little time—a week or two.
My mother's away in Scotland and I don't want to write it to her, I
want to tell her."
"Very well." She would agree to anything that he wanted, but for a
very brief moment a little chill of apprehension, whence she knew
not, had fallen upon her heart.
"Now I must go." She got up. They stood in a long wonderful
embrace. He would not let her go. She came back to him again and
again; then she broke away and, her heart beating with ecstasy and
happiness, came out into the hall that now seemed dark and misty.
She stood for a moment trying to collect her thoughts. Suddenly
Victoria appeared out of nowhere as it seemed. She spoke
breathlessly, as though she had been running.
"Millie . . . Millie . . . Oh, you're not going? You can't be. . . . You
can't mean what you said. You mustn't go. We'll never, never get on
without you. Clarice is terribly sorry she was rude, and I've given
Mrs. Martin notice. You're quite right. She ought to have gone long
ago. . . . You can't leave us. You can do just what you like, have
what you like. . . ."
"Oh, you darling!" Millie flung her arms around her. "I'm sorry I was
cross. Of course I'll stay. I'll go and beg Clarice's pardon—anything
you like. I'll beg Mrs. Martin's if you want me to. Anything you like!
I'll even kiss Mr. Block if you like. . . . Do you mind? Bunny Baxter's
here. Can he stay to lunch?"
"Oh, I'm so glad!" Victoria was tearfully wiping her eyes. "I thought
you might have gone already. We'll never have a word again, never.
Of course he can stay, for as long as he likes. Dear me, dear me,
what a morning!"
The hoarse voice of Beppo was heard to announce that luncheon
was ready.

These are some letters that Millicent and Henry wrote to one
another at this time:

Metropolitan Hotel, Cladgate,


July 17, 1920.
Darling Henry—We got down here last night and now it's ever so
late—after twelve—and I'm writing in a bedroom all red and
yellow, with a large picture of the Relief of Ladysmith over my
bed, and it's the very first moment I've had for writing to you.
What a day and what a place to spend six weeks in! However,
Victoria seems happy and contented, which is the main thing.
It appears that she stayed in this very hotel years ago with her
father when they were very poor, and they had two tiny rooms
at the very top of the hotel. He wanted her to see gay life, and
at great expense brought her here for a week. All the waiters
were sniffy and the chambermaid laughed at her and it has
rankled ever since. Isn't it pathetic? So she has come now for
six solid weeks, bringing her car and Mr. Andrew the new
chauffeur and me with her, and has taken the biggest suite in
the hotel. Isn't that pathetic? Clarice and Ellen, thank God, are
not here, and are to arrive when they do come one at a time.
We had so short a meeting before I came away that there was
no time to tell one another anything, and I have such lots to
tell. I didn't think you were looking very happy, Henry dear, or
very well. Do look after yourself. I'm glad your Baronet is taking
you into the country very shortly. I'm sure you need it. But do
you get enough to eat with him? His sister sounds a mean old
thing and I'm sure she scrimps over the housekeeping. (Scrimps
is my own word—isn't it a good one?) Eat all you can when
you're in the country. Make love to the cook. Plunder the pantry.
Make a store in your attic as the burglar did in our beloved Jim.
One of the things I hadn't time to tell you is that I had an
unholy row with every one before we came away. I told you that
a storm was blowing up. It burst all right, and first the
housekeeper told me what she thought and then I told the
housekeeper and then Clarice had her turn and Victoria had
hers and I had the last turn of all. I won a glorious victory and
Victoria has eaten out of my hand ever since, but I'm not sure
that I'm altogether glad. Since it happened Victoria's been half
afraid of me, and is always looking at me as though she
expected me to burst out again, and I don't like people being
afraid of me—it makes me feel small.
However, there it is and I've got her alone here all to myself,
and I'll see that she isn't frightened long. Then there's
something else. Something—— No, I won't tell you yet. For one
thing I promised not to tell any one, and although you aren't
any one exactly still—— But I shan't be able to keep it from you
very long. I'll just tell you this, that it makes me very, very
happy. Happier than I dreamt any one could ever be.
I shouldn't think Cladgate was calculated to make any one very
happy. However you never can tell. People like such odd things.
All I've seen of it so far is a long, oily-grey sea like a stretch of
linoleum, a pier with nobody on it, a bandstand with nobody in
it, a desert of a promenade, and the inside of this hotel which is
all lifts, palms, and messenger boys. But I've seen nothing yet,
because I've been all day in Victoria's rooms arranging them for
her. I really think I'm going to love her down here all by myself.
There's something awfully touching about her. She feels all the
time she isn't doing the right thing with her money. She buys all
the newspapers and gets shocks in every line. One moment it's
Ireland, another Poland, another the Germans, and then it's the
awful winter we're going to have and all the Unemployed there
are going to be. I try to read Tennis to her and all about the
wonderful Tilden, and what the fashions are at this moment in
Paris, and how cheerful Mr. Bottomley feels about everything,
but she only listens to what she wants to hear. However, she
really is cheerful and contented for the moment.
I had a letter from Katherine this morning. She says that mother
is worse and isn't expected to live very long. Aunt Aggie's come
up to see what she can do, and is fighting father and the nurse
all the time. For the first time in my life I'm on Aunt Aggie's
side. Any one who'll fight that nurse has me as a supporter.
Katherine's going to have another baby about November and
says she hopes it will be a girl. If it is it's to be called Millicent.
Poor lamb! Philip's gone in more and more for politics and says
it's everybody's duty to fight the Extremists. He's going to stand
for somewhere in the next Election.
I must go to bed. I'll write more in a day or two. Write to me
soon and tell me all about everything—and Cheer Up!—Your
loving Millie.
Have you seen Peter?

Panton St., July 21, '20.


Dear Millie—Thank you very much for your letter. Cladgate
sounds awful, but I daresay it will be better later on when more
people come. I'll make you an awful confession, which is that
there's nothing in the world I like so much as sitting in a corner
in the hall of one of those big seaside hotels and watching the
people. So long as I can sit there and don't have to do anything
and can just notice how silly we all look and how little we mean
any of the things we say, and how over-dressed we all are and
how conscious of ourselves and how bent on food, money and
love, I can stay entranced for hours. . . . However, this is off the
subject. What is your secret? You knowing how inquisitive I am,
are treating me badly. However, I see that you are going to tell
me all about it in another letter or two, so I can afford to wait.
How strangely do our young careers seem to go arm in arm
together at present. What I wanted to tell you the other day,
only I hadn't time, is that I also have been having a row in the
house of my employer—an actual fist-to-fist combat or rather in
this case a chest-to-chest, because we were too close to one
another to use our fists. "We" was not Sir Charles and myself,
but his great bullock of a brother. It was a degrading scene, and
I won't go into details. The bullock tried to poke his nose into
what I was told he wasn't to poke his nose into, and I tried to
stop him, and we fell to the ground with a crash just as Sir
Charles came in. It's ended all right for me, apparently—
although I haven't seen the bullock again since.
Sir Charles is a brick, Millie; he really is. I'd do anything for him.
He's awfully unhappy and worried. It's hateful sitting there and
not being able to help him. He's had in a typist fellow to arrange
the letters, Herbert Spencer by name. I asked him whether he
were related to the great H. S. and he said no, that his parents
wanted him to be and that's why they called him Herbert, but
that wasn't enough. He has large spectacles and long sticky
fingers and is very thin, but he's a nice fellow with a splendid
Cockney accent. I can now concentrate on the "tiddley-bits"
which are very jolly, and what I shan't know soon about the
Edinburgh of 1800-1840 won't be worth anybody's knowing.
Next week I go down with Duncombe to Duncombe Hall.
Unfortunately Lady Bell-Hall goes down too. I'm sorry, because
when I'm with some one who thinks poorly of me I always make
a fool of myself, which I hate doing. I've been over to the house
every day and enquired, but I haven't seen mother yet. Aunt
Aggie is having a great time. She has ordered the nurse to
leave, and the nurse has ordered her to leave; of course they'll
both be there to the end. Poor mother. . . . But why don't you
and I feel it more? We're not naturally hard or unfeeling. I
suppose it's because we know that mother doesn't care a damn
whether we feel for her or no. She put all her affection into
Katherine years ago, and then when Katherine disappointed her
she just refused to give it to anybody. I would like to see her for
ten minutes and tell her I'm sorry I've been a pig so often, but I
don't think she knows any more what's going on.
The worst of it is that I know that when she's dead I shall hate
myself for the unkind and selfish things I've done and only
remember her as she used to be years ago, when she took me
to the Army and Navy Stores to buy underclothes and gave me
half-a-crown after the dentist.
I'm all right. Don't you worry about me. The girl I told you
about is in a terrible position, but I can't do anything at present.
I can only wait until there's a crisis—and I detest waiting as you
know. Peter's all right. He's always asking about you.
Norman and Forrest are going to reissue two of his early books,
Reuben Hallard and The Stone House, and at last he's begun his
novel. He says he'll probably tear it up when he's done a little,
but I don't suppose he will. Do write to him. He thinks a most
awful lot of you. It's important with him when he likes anybody,
because he's shut up his feelings for so long that they mean a
lot when they do come out. Write soon.—Your loving brother,
Henry.

Metropolitan Hotel, Cladgate,


July 26, '21.
Dearest Henry—Thank you very much for your letters. I always
like your letters because they tell me just what I want to know,
which letters so seldom do do. Mary Cass, for instance, tells me
about her chemistry and sheep's hearts, and how her second
year is going to be even harder than her first, but never
anything serious.
The first thing about all this since I wrote last is that it has
rained incessantly. I don't believe that there has ever been such
a wet month as this July since the Flood, and rain is especially
awful here because so many of the ceilings seem to have glassy
bits in them, and the rain makes a noise exactly like five
hundred thunderstorms, and you have to shriek to make
yourself heard, and I hate shrieking. Then it's very depressing,
because all the palms shiver in sympathy, and it's so dark that
you have to turn on the electric light which makes every one
look hideous. But I don't care, I don't care about anything! I'm
so happy, Henry, that I—There! I nearly let the secret out. I
know that I shan't be able to keep it for many more letters and
I told him yesterday—— No, I won't. I must keep my promise.
Here's Victoria,—I must write to you again to-morrow.

Telegram:

July 27.
Who's Him? Let me know by return.
Henry.

Cladgate, July 28.


Dearest Henry—You're very imperative, aren't you? Fancy wasting
money on a telegram and your finances in the state they're in.
Well, I won't tantalize you any longer; indeed, I can't keep it
from you, but remember that it's a secret to the whole world for
some time to come.
Well. I am engaged to a man called Baxter, and I love him
terribly. He doesn't know how much I love him, nor is he going
to know—ever. That's the way to keep men in their places. Who
is he you say? Well, he's a young man who came to help Clarice
with her theatricals in London. I think I loved him the very first
moment I saw him—he was so young and simple and jolly and
honest, and such a relief after all the tantrums going on
elsewhere. He says he loved me from the first moment, too, and
I believe he did. His people are all right. His father's dead, but
his mother lives in a lovely old house in Wiltshire, and wears a
lace white cap. He's the only child, and his mother (whom I
haven't yet seen) adores him. It's because of her that we're
keeping things quiet for the moment, because she's staying up
in Scotland with some relatives, and he wants to tell her all
about it by word of mouth instead of writing to her. I hate
mysteries. I always did—but it seems a small thing to grant him.
He's working at the Bar, but as there appears to be no chance
of making a large income out of that for some time, he thinks
he'll help a man in some motor works—there's nothing about
motors that he doesn't know. Meanwhile, he's staying here in
rooms near the hotel. Of course, Victoria has been told nothing,
but I think she guesses a good deal. She'd be stupid if she
didn't.
I've never been in love before. I had no conception of what it
means. I'm not going to rhapsodize—you needn't be afraid, but
in my secret self I've longed for some one to love and look after.
Of course, I love you, Henry dear, and always will, and certainly
you need looking after, but that's different. I want to do
everything for Ralph (that's the name his mother gave him, but
most people call him Bunny), mend his socks, cook his food,
comfort him in trouble, laugh with him when he's happy, be
poor with him, be rich with him, anything, everything. Of course
I mustn't show him I want to do all that, it wouldn't be good for
him, and we must both keep our independence, but I never
knew that love took you so entirely outside yourself, and threw
you so completely inside some one else.
Now you're quite different; I don't mean that your way of being
in love isn't just as good as mine, but it's different. With you it's
all in the romantic idea. I believe you like it better when she
slips away from you, always just is beyond you, so that you can
keep your idea without tarnishing it by contact. You want yours
to be beautiful—I want mine to be real. And Bunny is real.
There's no doubt about it at all.
Oh! I do hope you'll like him. You're so funny about people. One
never knows what you're going to think. He's quite different
from Peter, of course—he's much younger for one thing, and he
isn't intellectually clever. Not that he's stupid, but he doesn't
care for your kind of books and music. I'm rather glad of that. I
don't want my husband to be cleverer than I am. I want him to
respect me.
I'm terribly anxious for you both to meet. Bunny says he'll be
afraid of you. You sound so clever. It's still raining, but of course
I don't care. Victoria is a sweet pet and will go to Heaven.—Your
loving sister, Millicent.
P.S.—Don't tell Peter.

Panton St., July 30.


My dear Mill—I don't quite know what to say. Of course, I want
you to be happy, and I'd do anything to make you so, but
somehow he doesn't sound quite the man I expected you to
marry. Are you sure, Millie dear, that he didn't seem nice just
because everybody at the Platts seemed horrid? However,
whatever will make you happy will please me. As soon as I
come up from Duncombe I must meet him, and give you both
my grand-paternal blessing. We go down to Duncombe to-
morrow, and if it goes on raining like this, it will be pretty damp,
I expect. I won't pretend that I'm feeling very cheerful. My affair
is in a horrid state. I can't bear to leave her, and yet there's
nothing else for me to do. However, I shall be able to run up
about once a week and see her. Her mother is still friendly, but I
expect a row at any moment. This news of yours seems to have
removed you suddenly miles away. It's selfish of me to feel that,
but it was all so grizzly at home yesterday that for the moment
I'm depressed. Oh, Millie, I do hope you'll be happy. . . . You
must be, you must!—Your loving brother,
Henry.
CHAPTER VI
HENRY AT DUNCOMBE
In the late afternoon of Wednesday August 4 Henry found himself
standing in the pouring rain on the little wind-driven platform of
Salting Marting, the station for Duncombe.
He was trying to whistle as he stood under the eaves of the little
hideous roof, his hands deep in his waterproof, his eyes fixed sternly
upon a pile of luggage over which he was mounting guard. The car
ordered to meet them had not appeared, the ancient Moffatt was
staring down the wet road in search of it, Sir Charles was
telephoning and Lady Bell-Hall shivering over the simulacrum of a
fire in the little waiting-room.
Henry did not feel very cheerful; this was not a happy prelude to a
month at Duncombe Hall, and the weather had been during the last
few weeks more than even England's reputation could tolerate.
Henry was very susceptible to atmosphere, and now the cold and
wet and gathering dusk seem to have been sent towards him from
Duncombe and to speak ominously in his ear of what he would find
there.
He had seldom in all his young life felt so lonely, and he seemed to
be back in the War again waiting in a muddy trench for dawn to
break and . . .
"I've succeeded in procuring something," wheezed Moffatt in his ear,
"if you'd kindly assist with the luggage, Mr. Blanchard."
(It was one of Moffat's most trying peculiarities that he could not
master Henry's name.)
"Why, it's a four-wheeler!" Henry heard Lady Bell-Hall miserably
exclaim.
"It's all I could do, m'lady," creaked Moffatt. "Very difficult—'s time of
the evening. Did m' best, m'lady."
They climbed inside and were soon rising and sinking in a grey dusk,
whilst boxes, bags and packages surged around them. There was
complete silence, and at last Lady Bell-Hall went to sleep on Henry's
shoulder, to his extreme physical pain, because a hatpin stuck
sharply into his shoulder, and spiritual alarm, because he knew how
deeply she would resent his support when she woke up. Strange
thoughts flitted through his head as he bumped and jolted to the
rattle of the wheels. They were dead, stumbling to the Styx, other
coaches behind them; he could fancy the white faces peering from
the windows, the dark coachman and yet other grey figures stealing
from the dusky hedges and climbing in to their fore-destined places.
The Styx? It would be cold and windy and the rain would hiss upon
the sluggish waters. An exposed boat as he had always understood,
the dim figures huddled together, their eyes straining to the farther
shore. He nodded, nodded, nodded—Millie, Christina . . . Mrs.
Tenssen . . . a strange young man called Baxter whom he hated at
sight and tried to push from the Coach. The figure changed to Tom
Duncombe, swelling to an enormous size, swelling, ever swelling,
filling the coach so that they were breathless, crushed . . . a sharp
pricking awoke him to a consciousness of Lady Bell-Hall's hatpin and
then, quite suddenly, to something else. The noise that he heard,
not loud, but in some way penetrating beyond the rattle and
mumble of the cab, was terrifying. Some one in great pain—grr—grr
—grr—Ah! Ah!—grr—the noise compressed between the teeth and
coming in little gasps of agony.
"What is it?" he said, in a whisper. "Is that you, sir?" He could see
very little, the afternoon light faint and green behind the rain-blurred
panes, but the black figure of Duncombe was hunched up against
the cab-corner.
"What is it? Oh, sir, what is it?"
Then very far away a voice came to him, the words faltering from
clenched teeth.
"It's nothing. . . . Pain bad for a moment——"
"Shall I stop the cab, sir?"
"No, no. . . . Don't wake my—sister."
The sound of agonizing pain behind the words was like something
quite inhuman, unearthly, coming from the ground beneath the cab.
Henry, trembling with sympathy, and a blind eagerness to help, leant
forward. Could he change seats? He had wished to sit with his back
to the horses but Duncombe had insisted on his present place.
"Please . . . can't I do something?"
"No . . . nothing. It will pass in a moment."
A hand, trembling, came out and touched his, then suddenly
clutched it, jumping from its weak quiver into a frantic grasp, almost
crushing Henry's. The hand was hot and damp. For the moment in
the contact with that trouble, the world seemed to stop—there was
no sound, no movement—even the rain had withered away. . . .
Then the hand trembled again, relaxed, withdrew.
Henry said nothing. He was shaking from head to foot.
Lady Bell-Hall awoke. "Oh, where am I? Who's that? Is that the bell?
. . ." Then very stiffly: "Oh, I'm very sorry, Mr. Trenchard. I'm afraid I
was dozing. Are we nearly there? Are you there, Charles?"
Very faintly the voice came back.
"Yes . . . another half-mile. We've passed Brantiscombe."
"Really, this cab. I wonder what Mortimers were doing, not sending
us a taxi. On a day like this too."
There was silence again. The cab bumped along. Henry could think
of nothing but that agonizing whisper. Only terrible suffering could
have produced that and from such a man as Duncombe. The
affection and devotion that had grown through these months was
now redoubled. He would do anything for him, anything. Had he
known? Memories came back to him of hours in the library when Sir
Charles had sat there, his face white, his eyes sternly staring.
Perhaps then. . . . But surely some one knew? He moved impatiently,
longing for this horrible journey to be ended. Then there were lights,
a gate swung back, and they were jolting down between an avenue
of trees. Soon the cab stopped with a jerk before a high grey stone
building that stood in the half-light as a veiling shadow for a high
black doorway and broad sweeping steps. Behind, in front and on
every side they were surrounded, it seemed, by dripping and sighing
trees. Lady Bell-Hall climbed out with many little tweaks of dismay
and difficulty, then Henry. He turned and caught one revealing vision
of Sir Charles's face—white, drawn and most strangely aged—as he
stood under the yellow light from a hanging square lantern before
moving into the house.
At once standing in the hall Henry loved the house. It seemed
immediately to come towards him with a gesture of friendliness and
sympathy. The hall was wide and high with a deep stone fireplace
and a dark oak staircase peering from the shadows. It was ill-lit; the
central lamp had been designed apparently to throw light only on
the portrait of a young man in the dress of the early eighteenth
century that hung over the fireplace. Under his portrait Henry read
—"Charles Forest Duncombe—October 13th, 1745."
An elderly, grave-looking woman stood there and a young apple-
cheeked footman to whom Moffatt was "tee-heeing, tut-tutting" in a
supercilious whisper. Lady Bell-Hall recovered a little. "Ah, there you
are, Morgan. Quite well? That's right. And we'll have tea in the Blue
Boom. It's very late because Mortimer never sent the taxi, but we'll
have tea all the same. I must have tea. Take Pretty One, please,
Morgan. Don't drop her. Ickle-Ickle-Ickle. Was it cold because we
were in a nasty slow cab, was it then? There, then, darling. Morgan
shall take her then—kind Morgan. Yes, tea in the Blue Room,
please."
At last Henry was in his room, a place to which he had come, as it
seemed to him, through endless winding passages and up many
corkscrew stairs. It was a queer-shaped little room with stone walls,
a stone floor and very narrow high windows. There was, of course,
no fire, because in England we keep religiously to the seasons
whatever the weather may be. The rain was driving heavily upon the
window-panes and some branches drove with irregular monotony
against the glass. The furniture was of the simplest, and there was
only one picture, an oil-painting over the fireplace, of a thin-faced,
dark-browed, eighteenth-century priest, cadaverous, menacing,
scornful.
Henry seemed to be miles away from any human company. Not a
sound came to him save the rain and the driving branches. He
washed his hands, brushed his hair, and prepared to find his way
downstairs, but beside the door he paused. As he had fancied in the
library in Hill Street, so now again it seemed to him that something
was whispering to him, begging him for sympathy and
understanding. He looked back to the little chill room, then up to the
portrait of the priest, then to the window beyond which he could see
the thin grey twilight changing to the rainy dark. He stood listening,
then with a little shiver, half of pleasure, half of apprehension, he
went out into the passage.
His journey, then, was full of surprises. The house was deserted. The
passage in which he found himself was bordered with rooms, and
after passing two or three doors he timidly opened one and peered
in. In the dusk he could see but little, the air that met him was close
and heavy, dust blew into his nostrils, and he could just discern a
high four-poster bed. The floor was bare and chill. Another room
into which he looked was apparently quite empty. The passage was
now very dark and he had no candle; he stumbled along, knocking
his elbow against the wall. "They might have put me in a livelier part
of the house," he thought; and yet he was not displeased, carrying
still with him the sense that he was welcome here and not alone. In
the dusk he nearly pitched forward over a sudden staircase, but
finding an oak banister he felt his way cautiously downward. On the
next floor he was faced with a large oak door, which would lead, he
fancied, to the other part of the house. He pushed it slowly back and
found himself in a chapel suffused with a dark purple light that fell
from the stained-glass window above the altar.
He could see only dimly, but above the oaken seats he fancied that
some tattered flags were hanging. Here the consciousness of
sympathy that had been with him from the beginning grew stronger.
Something seemed to be urging him to sit down there and wait. The
air grew thicker and the windows, seats and walls were veiled in
purple smoky mist. He crept out half-ashamedly as though he were
deserting some one, found the stairs again, and a moment later was
in a well-lit carpeted passage. With a sigh of relief he saw beyond
him Moffatt and the footman carrying the tea.
He woke next day to an early morning flood of sunshine. His
monastic little room with its stone walls and narrow windows swam
in the light that sparkled, as though over water, above his faded blue
carpet. He went to his window and looked out on to a boxwood
garden with a bleached alley that led to a pond, a statue and a little
green arbour. Beyond the garden there were woods, pale green,
purple, black against the brightness of the early morning sky.
Thousands of birds were singing and the grass was intensely vivid
after the rain of the day before, running in the far distance around
the arbour like a newly painted green board.
The impression that the next week made was all of colour, light and
sunshine. That strange melancholy that had seemed to him to
pervade everything on the night of his arrival was now altogether
gone, although a certain touching, intangible wistfulness was there
in everything that he saw and heard.
The house was much smaller than he had at first supposed—
compact, square, resembling in many ways an old-fashioned doll's
house. Duncombe told him that small as it was they had closed
some of the rooms, and apologized to him for giving him a bedroom
in the unfurnished portion. "In reality," he explained, "that part of
the house where you are is the brightest and most cheerful side. Our
mother, to whom my sister was devotedly attached, died in the room
next to yours, and my sister cannot bear to cross those passages."
The little chapel was especially enchanting to Henry; the stained
glass of the east window was most lovely, deep, rich, seeming to
sink into the inmost depths of colour; it gave out shadows of purple
and red and blue that he had never seen before. The three old flags
that hung over the little choir were tattered and torn, but proud. All
the rooms in the house were small, the ceilings low, the fireplaces
deep and draughty.
Henry soon perceived that Duncombe loved this house with a
passionate devotion. He seemed to become another man as he
moved about in it busied continually with tiny details, touching this,
shifting that, having constant interviews with Spiders, the gardener,
a large, furry-faced man, and old Moffatt, and Simon, the apple-
cheeked footman; an identity suddenly in its right place, satisfying
its soul, knowing its true country as he had never seemed to do in
London.
Henry saw no recurrence of the crisis in the cab. Duncombe made
no allusion to it and gave no sign of pain—only Henry fancied that
behind Duncombe's eyes he saw a foreboding consciousness of
some terror lying in wait for him and ready to spring.
The room in which he worked was a little library, diminutive in
comparison with the one in London, on the ground floor, looking out
on to the garden with the statue of Cupid and the pond—a dear little
room with old black-faced busts and high glass-fronted bookcases.
He had brought a number of books down with him, and soon he had
settled into the place as though he had been there all his life.
The interval of that bright, sunny, bird-haunted week seemed, when
afterwards he looked back to it, like a pause given to him in which to
prepare for the events that were even then crowding, grey-shaped,
face-muffled, to his door. . . .
CHAPTER VII
AND PETER IN LONDON
The Third of the Company meanwhile was feeling lonely and
deserted in London. London in August is really depressing in spite of
its being the conventional habit to say so. Around every worker's
brain there is a consciousness of the wires of captivity, and although
the weather may be, and indeed generally is, cold, wet and dark,
nevertheless it is hard to doubt but that it is bright and shining by
the sea and on the downs.
Peter could have gone into the country—nothing really held him to
London—but he had in literal truth no one with whom to go. In the
past he had not grumbled at having no friends; that was after all his
own choice—no one was to blame save himself—but during these
last months something had happened to him. He was at length
waking from a sleep that seemed to him as he looked back to have
lasted ever since that terrible night that he had spent on the hill
outside Tobias, the night of the day that Norah Monogue had died.
At last he was waking. What he had said to Millie was true—his
interest in herself and Henry was the force that had stirred him—and
stirred him now to what dangerous ends?
One night early in August flung him suddenly at the truth.
Two of the Three Graces—Grace Talbot and Jane Ross—were at
home to their friends in their upper part in Soho Square. Peter went
because he could not endure another lonely evening in his rooms—
another hour by himself and he would be forced to face the self-
confession that now at every cost he must avoid. So he went out
and found himself in the little low-ceilinged rooms, thick with smoke
and loud with conversation.
Grace Talbot was looking very faint and languid, buried in a large
armchair in the centre of the room with a number of men round her;
Jane Ross, plainer and more pasty than ever, was trying to be a
genial hostess, and discovering, not for the first time, that a caustic
tongue was more easily active than a kind heart. She wanted to be
nice to every one, but, really, people were so absurd and so stupid
and so slow. It wasn't her fault that she was so much cleverer than
every one else. She didn't want to be. But there you were; one can't
help one's fate.
Peter was greeted by one or two and settled down into a chair in a
corner near a nice, fat, red-faced man called Amos Campbell.
Campbell was a novelist who had once been of the Galleon school
and full of Galleonish subtleties, and now was popular and
Trollopian. He was, perhaps, a trifle over-pleased with himself and
the world, a little too prosperous and jolly and optimistic, and being
in addition the son of a Bishop, his voice at times rose to a pulpit
ring, but he meant well, was vigorous and bland and kindly. The
Graces thoroughly despised him and Peter was astonished to see
him there. Perhaps Nister or Gale or one of the other men had
brought him. He would have received no mention in this history had
it not been for a conversation that had important results both for
Peter and Henry.
Literary parties were curious affairs in 1920; they shared the strange
general character of that year in their confusion and formlessness. It
was a fact that at that time in London there was not a single critical
figure who commanded general respect. No school of criticism
carried any authority outside its immediate following—not one man
nor woman alive in Great Britain at that moment, not one literary
journal, weekly, monthly, or daily, carried enough weight behind its
literary judgments to shift for a moment the success or failure of a
book or a personality. Monteith, whose untidy black hair and pale
face Peter saw in the distance, had been expected to do great
things, but as soon as he had commanded a literary weekly he had
shown that he had no more breadth, nor wisdom, nor knowledge
than the other men around him, and he had fallen quickly into the
hands of a small clique who wrote for his papers in a happy spirit of
mutual admiration. All this was nobody's fault—it was the note of a
period that was far stronger in its character than any single human
being in it.
Everything was in the whirlpool of change, and that little room to-
night, with its smoke, furious conversation, aimless wandering of
dim figures moving in and out of the haze, formed a very good
symbol of the larger world outside.
Peter exchanged a few sentences with Campbell then fell into
silence. Suddenly the restraint that he had been forcing upon himself
for the last two months was relaxed. He would think of her. Why
should he not? For five minutes. For five minutes. In that dim,
smoke-obscured room who would know, who could tell, who could
see her save himself?
She came towards him, smiling, laughing, suddenly springing up
before him, her arms outstretched, bright in her orange jumper as
she had been on that day in Henry's room; then her face changed,
softened, gravity came into it; she was leaning towards him,
listening to his story, her eyes were kindly, she stretched out her
hand and touched his knee, he held out his arms. . . . Oh God! but
he must not. She was not for him, she could not be. Even were he
not already tied what could he offer her with his solemnity and
dreaminess? . . . He sprang up.
"Going already?" said Campbell. "Had enough of it?"
"No. I want to speak to Monteith. Hullo, there's Seymour. Keep him
off, Campbell. His self-satisfaction is more than I could endure just
now."
He sat down again and watched the figures, so curiously dim and
unreal that it might be a world of ghosts.
"Ghosts? Perhaps we are. Anyway we soon will be."
Jane Ross came stumping towards him. "Oh, Mr. Westcott! Come
and make yourself useful. There's Anna Makepeace over there, who
wrote Plum Bun. You ought to know her."
"I'm very happy where I am." She stumped away, and, sitting back
in his chair, he was suddenly aware of Grace Talbot, who, although
Monteith had come up and was talking very seriously, was staring in
front of her, lost, many miles away, dreaming.
She was suddenly human to him, she who had been for the most
part the drop of ink at the end of a cynical pen, the contemptuous
flash of an arrogant eye, the languorous irony of a dismissing hand.
She was as unhappy as himself; perceiving it suddenly and her
essential loneliness he felt a warmth of feeling for her that intensely
surprised him. "What children we all are!" he said to himself: "the
Graces, Monteith, the great Mr. Winch, the Parisian Mrs. Wanda, and
all the rest of us! How little we know! What insecure, fumbling
artists the best of us—and the only two great writers of our time are
the humblest men amongst us. After all our arrogance is necessary
for us because we have failed, written so badly, travelled such a tiny
way."
An urgent longing for humility, generosity, humour, kindliness of
heart swept over him. He felt that at that moment he could love any
one, however slow and conventional their brain were their heart
honest, generous and large. He and Monteith and Grace Talbot were
leading little hemmed-in lives, moving in little hemmed-in groups,
talking in little hemmed-in phrases.
Like Henry a few months earlier a revelation seemed to come to him
that Life was the gate to Art, not Art to Life. He surely had been
taught that lesson again and again and yet he had not learnt it.
He was pulled out into the centre of the room by a sudden silence
and a realization that every one was listening to a heated argument
between Monteith and Campbell. Grace Talbot was looking up from
her chair at the two men with her accustomed glance of lazy
superiority.
Westcott was surprised at Campbell, who was a comfortable man,
eager to be liked by every one, afraid therefore to risk controversy

You might also like