■CONTENTS
ix
■CHAPTER 4 Fun with Functions, and Never Having to Close That
JDBC Connection
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
A Function Is an Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Passing Functions As Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Partial Application and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Functions and Type Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Functions Bound to Variables in Scope . . . . . . . . . . . . . . . . . . . . . . 100
Putting Functions in Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Functions and Interactive Applications. . . . . . . . . . . . . . . . . . . . . . . 104
Building New Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Call-by-Name, Call-by-Value, and General Laziness. . . . . . . . . . . . . . . . 107
Build Your Own Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
JDBC Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
■CHAPTER 5 Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Basic Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Matching Any Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
More Pattern Matching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Testing Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Case Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Pattern Matching in Lists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Pattern Matching and Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Nested Pattern Matching in Case Classes . . . . . . . . . . . . . . . . . . . . 126
Examining the Internals of Pattern Matching. . . . . . . . . . . . . . . . . . 128
Pattern Matching As Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Object-Oriented and Functional Tensions. . . . . . . . . . . . . . . . . . . . . . . . . 131
Shape Abstractions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
■CHAPTER 6 Actors and Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
A Different Approach to Concurrency: Look Ma, No Locks . . . . . . . . . . . 137
Defining an Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Defining an Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Would You Like State With That? . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Instantiating an Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Implementing a Listener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
As an Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
19897FM.fm Page ix Monday, April 27, 2009 11:51 AM