i n d ex [nostarch.com] · array expressions, 142–143 keyword, 143 array2d module, 147 array2d...
TRANSCRIPT
i n D e x
Symbols(|...|) (active patterns), 173–174[|...|] (array expressions), 142<- operator (assignment), 29, 71, 120* (asterisk)
multiplication operator, 35tuple delimiter, 113
@ (at)list concatenation operator,
151–152verbatim string prefix, 38
<< operator (backward function composition), 108, 109
<| operator (backward pipelining), 108&&& operator (bitwise AND), 35^^^ operator (bitwise exclusive OR), 35<<< operator (bitwise left shift), 35~~~ operator (bitwise negation), 35||| operator (bitwise OR), 35>>> operator (bitwise right shift), 35(*...*) (block comments), 60&& operator (Boolean AND), 34|| operator (Boolean OR), 34:: operator (cons), 151- (dash)
set difference operator, 154subtraction operator, 35unary negative operator, 35
/ operator (division), 35:?> operator (dynamic cast), 83// (end-of-line comments), 60= operator (equality), 35, 36** operator (exponent), 35>> operator (forward function
composition), 108, 109|> operator (forward pipelining), 42,
79, 107, 108
;; (FSI expression terminator), 14> operator (greater than), 35>= operator (greater than or
equal to), 35<> operator (inequality), 35< operator (less than), 35<= operator (less than or equal to), 35#light directive, 6% operator (modulus), 35?? operator (null coalescing, C#), 42? (optional parameter prefix), 41, 75+ (plus)
addition operator, 35set union operator, 153string concatenation operator, 38unary positive operator, 35
~ (prefix operator), 94``...`` (quoted identifier delimiter), 33.. operator (range expression), 135–136:= operator (reference cell
assignment), 30! operator (reference cell
dereferencing), 30-> (right arrow)
function value, 105, 112sequence expressions, 135
- (set difference operator), 154[...] (square brackets)
indexed properties, 71list expressions, 149
^ (statically resolved type parameters), 49, 52
:> operator (static cast), 82^ operator (string concatenation,
ML style), 38<@...@> (strongly typed quoted literal),
190, 194
The Book of F# © 2014 by Dave Fancher
272 Index
() (unit value), 42| (vertical bar)
pattern matching delimiter, 11, 160union case delimiter, 127
<@@...@@> (weakly typed quoted literal), 190, 193, 194
_ (Wildcard patterns), 115/// (XML comment), 60–61
Aabstract
classes, 84–86keyword, 85members
methods, 86properties, 85–86
AbstractClassAttribute, 85access modifiers, 66
internal, 66, 70private, 66, 69, 70protected, 66public, 66, 70
accessor (property), 69Action (delegate), 105active patterns ((|...|))
defined, 173–174parameterized, 176partial, 174–175
active recognizer functions, 173add function (Event module), 78additional constructors, 66–67addition operator (+), 35agent-based programming, 250–255
counting queued messages, 252receiving messages, 251replying to messages, 252–253scanning messages, 251–252sending messages, 251starting agents, 251
Agent<'T> type alias. See MailboxProcessor<'T> class
AggregateException class, 240, 241Flatten method, 241Handle method, 240, 241InnerExceptions property, 240, 241
all operator (query expressions), 215AllowNullLiteralAttribute, 41and keyword, 111
mutually recursive functions, 111mutual recursion, 91property accessors, 70
AND patterns, 171–172antecedents, defined, 237Apache 2.0 license, 2ArgumentException, 56arguments, named, 74array
expressions, 142–143keyword, 143
Array2D module, 147array2D operator, 147Array3D module, 147ArrayList class, 49, 133–134Array module
copy function, 145empty function, 143get function, 145init function, 144set function, 145sortInPlaceBy function, 146sortInPlace function, 145–146sortInPlaceWith function, 146zeroCreate function, 144
Array patterns, 168arrays, 133, 142–149
accessing elements, 144–145copying, 145defined, 142empty, 143initializing, 144jagged, 148–149multidimensional, 147–148slicing, 145, 149sorting, 145–147
as keyword (self-identifiers), 67–68As patterns, 171assignment operator (<-), 29, 71, 120Async class
AwaitTask method, 248–249CancelDefaultToken method, 245–246Catch method, 247–248Parallel method, 245RunSynchronously method,
243–245, 248StartAsTask method, 248–249StartImmediate method, 243Start method, 243–244,
246–247, 249StartWithContinuations method,
243, 244TryCancelled method, 246
asynchronous programming model, 230
The Book of F# © 2014 by Dave Fancher
Index 273
asynchronous workflows, 241–250cancelling, 245–247defined, 241exception handling, 247–248let! keyword, 242, 249, 250return! keyword, 242, 249–250with TPL, 248–250use! keyword, 242
async modifier (C#), 249AsyncReplyChannel<'T> class, 252–255Async<'T> class, 242automatic generalization, generics, 49automatic properties, 70–71AutoOpenAttribute (modules), 8averageByNullable operator (query
expressions), 214averageBy operator (query
expressions), 213await operator (C#), 249
Bbackward function composition
operator (<<), 108, 109backward pipelining
defined, 108operator (<|), 108
banana clips, 173base implementations, calling, 84base keyword (inheritance), 84bigint data type, 35bindings
do, 33let, 28use, 30
Bind method (computation expressions), 259
bitwise operatorsAND (&&&), 35left shift (<<<), 35negation (~~~), 35OR, exclusive (^^^), 35OR, non-exclusive (|||), 35right shift (>>>), 35
block comments ((*...*)), 60Boolean
data type, 34operators
AND (&&), 34OR (||), 34
values, 34branching, 47–48
building strings example (computation expressions), 264–269
byte data type, 34
CCall active pattern, 196callbacks, defined, 237CancellationTokenSource class, 234, 239,
246–247casting, 82–83char data type, 37Choice union type, 248classes, 64–80CLIEventAttribute, 77, 80, 189CLIMutableAttribute, 121closures, 29, 112code quotation. See quoted expressionscollections, enumerable, 134collection types, converting between,
157–158Combine method (computation
expressions), 260, 262, 263, 266–267
CommandLineArgs property, 22comments, 59–61
block, 60end-of-line, 60XML, 60–61
computation expressionsanatomy of, 258–260builder classes, 258–259computation type, 258defined, 257–258desugaring, 259
concat function (string extension), 38conditional compilation, 21, 22Console class
Write method, 58WriteLine method, 58
cons operator (::), 151Cons patterns, 169Constant patterns, 164constraints, generics, 50constructors, 64–68
additional, 66–67default, 64primary, 65–66self-identifiers in, 67–68
contains operator (query expressions), 214
continuations, defined, 237–239
The Book of F# © 2014 by Dave Fancher
274 Index
conversions, numeric, 36count operator (query expressions), 213currying, 106–109custom exceptions, 56–58
Ddata parallelism, 230, 231–234data types, built-in
bigint, 35Boolean, 34byte, 34double, 34float, 34float32, 35int, 34int8, 34int16, 34int32, 34int64, 34nativeint, 35sbyte, 34single, 35string, 37uint, 34uint16, 34uint32, 34uint64, 34unativeint, 35unit, 42, 104
decimal data type, 34defaultArg function, 41–42, 75default constructor, 64default indexed property, 71–72default keyword (inheritance), 87DefaultValueAttribute, 67–69Delay method (computation
expressions), 260, 262, 263, 267
DerivedPatterns module (quoted expressions), 194
discriminated unions, 41, 47, 122–130additional members, 129–130defined, 122as object hierarchies, 124–126self-referencing, 126single case, 127as tree structures, 126–127as type abbreviations, 127–129
distinct operator (query expressions), 206
division operator (/), 35
do! keyword (computation expressions), 259
do bindings, 33double data type, 34downcasting, 83downto keyword (simple for loops), 46dynamic cast operator (:?>), 83Dynamic Type-Test patterns, 170
Eeager evaluation, 130elif keyword, 47–48end-of-line comments (//), 60entry point, 9EntryPointAttribute, 9enumerable collections, 134Enumerable.Range method, 136enumerations, 43–45
changing base type, 43defined, 43FlagsAttribute, 43–45reconstructing
enum function , 45EnumOfValue function, 45
equality operator (=), 35, 36escape sequences, 37Event module, 78, 80
add function, 78filter function, 78map function, 80pairwise function, 78partition function, 78
events, 77–80custom, 79–80observing, 78–79
Event<'T> class, 77Publish property, 79Trigger function, 79
exactlyOne operator (query expressions), 208
exactlyOneOrDefault operator (query expressions), 208
Exception class, 53, 56exception keyword, 56exceptions, 53
custom, 56–58handling, 53–55raising, 55–56reraising, 54try...finally, 55
exists operator (query expressions), 213, 215
The Book of F# © 2014 by Dave Fancher
Index 275
exn type abbreviation, 53explicit properties, 69–70exponent operator (**), 35expressions, 8–9expression trees, 187, 188–190Expr<'T> type, 190Expr type, 190, 191, 192, 194ExtCore project, 269ExtensionAttribute, 100, 105extension methods (C# and Visual
Basic), 99
FF# for Fun and Profit, 269F# Interactive
defined, 13directives
#help, 16#I, 17, 21#load, 16–17, 21#quit, 16#r, 17, 21#time, 17–18
expression terminator (;;), 14fsi.exe, 13it identifier, 15options
--, 22--define, 21--exec, 22-I, 21--lib, 21--load, 20–21--optimize, 23--quiet, 22–23-r, 21--reference, 21--tailcalls, 23--use, 21in Visual Studio, 20
reset interactive session, 16timing, 17val (output), 15Visual Studio window, 13–14
F# Software Foundation, 2Factory pattern, 90FailureException, 56failwithf function, 56failwith function, 56fields, 68–69
explicit, 68–69let bindings, 68
file extensions.fs, 18.fsx, 18
FileNotFoundException, 54filter function (Event module), 78find operator (query expressions), 208FizzBuzz example
active patterns, 173-174computation expressions, 261–264partial active patterns, 174–175
FlagAttribute enumerations, 43–45flexible types, 52float32 data type, 35float data type, 34flow control, 45–48
for loops, 46–47if...then expressions, 47–48while loops, 46
foreach loop (C#), 46for loops, 46–47For method (computation expressions),
259, 263forward function composition operator
(>>), 108, 109forward pipelining, 107–108forward pipelining operator (|>), 42,
79, 107, 108FSharpFunc (delegate), 105, 112FSharpFuncUtil class, 105FSharpList<'T> class, 149.fs files, 18FSI. See F# Interactivefsi.exe, 13fst function, 114.fsx files, 18Func (delegate), 105function
composition, 108–109expressions, 78, 112keyword, 161values, 105
functional purity, 27–28functions, higher-order, 105
Ggeneric measures, 184generics
constraints, 50–52comparison, 52default constructor, 51defined, 50delegate, 51
The Book of F# © 2014 by Dave Fancher
276 Index
generics: constraints (continued)enumeration, 51equality, 52member, 51nullness, 50reference type, 51subtype, 50unmanaged, 51value type, 51
defined, 48generalization
automatic, 49explicit, 50
type parameters, statically resolved, 49, 52
Wildcard pattern, 52GetCommandLineArgs method, 22GetEnumerator method, 134GetSlice method, 76–77global keyword (namespaces), 7greater than operator (>), 35greater than or equal to operator
(>=), 35groupBy operator (query expressions),
210–211groupJoin operator (query expressions),
216–217groupValBy operator (query
expressions), 211
Hhandling exceptions, 53–55HasFlag method (System.Enum), 44–45Hashtable class, 134head operator (query expressions), 207headOrDefault operator (query
expressions), 207higher-order functions, 105
IIComparable<'T> interface, 139Identifier patterns, 128, 129, 163,
164–165identifiers, quoted, 33IDisposable interface, 30, 92, 93IEnumerable interface, 134IEnumerable<'T> interface, 46, 134, 149if...then expressions, 47–48ignore function, 42immutability, 26–28implicit properties, 70–71
indexed propertiesone-dimensional, 71multidimensional, 72
inequality operator (<>), 35inheritance, 81–88inherit keyword, 82, 94initializing properties, 72–73instance methods, 73int8 data type, 34int16 data type, 34Int32 active pattern, 196int32 data type, 34int64 data type, 34int data type, 34interface keyword, 93interfaces, 91–94
defining, 93–94implementing, 92–93inheritance, 94marker, 93
internal access modifier, 66, 70International System of Units, 178invalidArg function, 56InvalidCastException, 83IStructuralEquatable interface, 115Item property (indexed properties), 71it identifier (F# Interactive), 15
Jjoin operator (query expressions), 216
Llambda expressions, 78, 112LanguagePrimitives module, 180last operator (query expressions), 207lastOrDefaultOperator (query
expressions), 207lazy evaluation, 130–131lazy keyword, 130Lazy<'T> class, 130less than operator (<), 35less than or equal to operator (<=), 35let! keyword
asynchronous workflows, 242computation expressions, 259
let keyword, 28license, Apache 2.0, 2lightweight syntax, 6LINQ, 49, 76, 99, 104, 187, 201list comprehensions. See sequence
expressions
The Book of F# © 2014 by Dave Fancher
Index 277
list concatenation operator (@), 151–152List module
append function, 152concat function, 152contains function, 151empty function, 150exists function, 151head function, 150nth function, 150tail function, 150
List patterns, 168–169lists, 149–152
accessing elements, 150combining, 151–152creating, 149–150defined, 149head, 150tail, 150
List<'T> class, 49, 134, 149LiteralAttribute, 28, 164, 165Literal patterns, 165literals, 28locking, 232loops, 45–47
for, enumerable, 46for, simple, 46while, 46
MMailboxProcessor<'T> class, 250
CurrentQueueLength property, 252PostAndReply method, 253Post method, 251, 252Receive method, 251, 252Reply method, 253Scan method, 251Start method, 250–251
main method. See entry pointmap function (Event module), 80Map<'Key, 'Value> class, 155Map module
containsKey function, 156find function, 156findKey function, 157tryFind function, 157tryFindKey function, 157
maps, 155–157creating, 156defined, 155finding keys, 157finding values, 156–157
marker interfaces, 93
Mars Climate Orbiter, 177match expressions, 127, 159–162
defined, 159–160exhaustive matching, 162–163guard clauses, 160–161pattern matching functions,
161–162MatchFailureException, 162maxByNullable operator (query
expressions), 214maxBy operator (query expressions), 213MeasureAttribute, 178measures. See units of measuremember keyword, 69, 73member val keyword pair (implicit
properties), 70metaprogramming, 187method accessibility, 73–74methods, 73–77
instance, 73overloaded, 75
minByNullable operator (query expressions), 214
minBy operator (query expressions), 213ML programming language, 1modules, 7–8
declaring, 7defined, 7local, 7opening, 8top-level, 7
modulus operator (%), 35monads, 257. See also computation
expressionsmultiplication operator (*), 35mutability, 29mutable bindings, 29mutable keyword, 29, 120, 121mutual recursion
between functions, 111between types, 91
Nnamed arguments, 74namespace keyword, 6namespaces, 6–7
declaring, 6global, 7nesting, 6opening, 7
nativeint data type, 35
The Book of F# © 2014 by Dave Fancher
278 Index
new keywordadditional constructors, 66instance creation, 65object expressions, 98, 99
not (Boolean operator), 34nth operator (query expressions), 207nullability, 41–42nullable operators, 205–206null keyword, 41Null patterns, 165–166numeric data types, 34–35
Oobject expressions, 97–99OCaml programming language, 1of keyword (discriminated unions), 122open keyword
modules, 8namespaces, 7
OperationCanceledException, 233–234, 240operators
custom, 94–97global, 96–97infix, 95–96new, 96overloading, 94prefix, 94–95
optional parameters, 75Option Infer (Visual Basic), 39option keyword, 41Option<'T> type, 41, 75, 122
defined, 122introduced, 41None, 41, 122–123Some<'T>, 41, 122–123
optional parameter prefix (?), 41, 75optional parameters, 41, 75OR patterns, 172out parameters, 116overloading
methods, 75operators, 94
Overridable modifier (Visual Basic), 87override keyword (inheritance), 83–84overriding members, 83–84
Ppairwise function (Event module), 78Parallel class
ForEach method, 231For method, 231–232, 233Invoke method, 234–235
Parallel LINQ, 231parallel loops
cancelling, 233–234short-circuiting, 233
ParallelLoopState class, 233Break method, 233Stop method, 233
ParallelOptions class, 234parallel programming, 230parameters, optional, 75partial active patterns, 174–175partial application, 106partition function (Event module), 78, 79pattern matching
active patterns, 173–174AND patterns, 171–172Array patterns, 168As patterns, 171Cons patterns, 169Constant patterns, 164Dynamic Type-Test patterns, 170and exception handling, 53–55Identifier patterns, 128, 129, 163,
164–165List patterns, 168–169Literal patterns, 165Null patterns, 165–166OR patterns, 172parentheses, use of, 172–173partial active patterns, 174–175Record patterns, 167–168Singleton pattern, 66Tuple patterns, 114, 166–167Type-Annotated patterns, 169–170Union Case patterns, 164–165Variable patterns, 163Wildcard patterns, 115, 163
pattern matching delimiter (|), 11, 160pattern-matching functions, 161–162Pattern module (quoted
expressions), 194pipelining, 107–108
backward, 108defined, 107forward, 107–108noncurried functions, 108
PLINQ, 231potential parallelism, 231prefix operator (~), 94primary constructor, 65–66printf function, 58printfn function, 58
The Book of F# © 2014 by Dave Fancher
Index 279
private access modifier, 66, 69, 70ProjectionParameterAttribute, 219–220project templates, 2–4properties, 69–73
automatic, 70–71explicit, 69–70implicit, 70–71indexed
one-dimensional, 71multidimensional, 72
initializing, 72–73PropertyGet active pattern, 198protected access modifier, 66public access modifier, 66, 70Publish property (events), 79purity, functional, 27–28
Qquery expressions
aggregating data, 213–214defined, 201–202detecting items, 214–215distinct values, 206extending, 219–221filtering data, 204–206finding arbitrary items, 207–208first or last item, 207grouping, 210–211joining data sources, 215–219pagination, 211–213projecting data, 203–204sorting, 209–210
quoted expressionscreating through reflection, 191–192decomposing, 194–199defined, 187manual composition, 192–193quoted literals, 190–191splicing, 194strongly typed, 190weakly typed, 190
quoted identifier delimiter (``...``), 33
Rraise function, 55, 56raising exceptions, 55–56range expression operator (..), 135, 136range expressions, 135–136read-evaluate-print loop (REPL), 13readonly keyword (C#), 28
rec keyword (recursive functions), 109record expressions
copy and update, 120defined, 118new records, 118–119
Record patterns, 167–168record types, 118–122
additional members, 121–122copying, 120creating, 118–119defined, 118mutability, 120–121naming conflicts, 119–120
recursiondefined, 109tail-call, 110–111
reference cell assignment operator (:=), 30
reference cell dereferencing operator (!), 30
reference cells, 29-30referential transparency, 104ReflectedDefinitionAttribute, 191, 192, 194ref operator, 29REPL (read-evaulate-print loop), 13reraise function, 54ResizeArray<'T> type abbreviation, 149ReturnFrom method (computation
expressions), 259return! keyword
asynchronous workflows, 242computation expressions, 259
return keyword, 104 Return method (computation
expressions), 259return values, 9–10Run method (computation
expressions), 260
Ssbyte data type, 34scripting
command-line arguments, 22with F# Interactive, 18–19
SealedAttribute, 87, 88sealed classes, 87–88Select Case statement (Visual Basic),
127, 160select operator (query expressions),
203–204self-identifiers in constructors, 67–68
The Book of F# © 2014 by Dave Fancher
280 Index
Seq moduleaverageBy function, 142average function, 141empty function, 136–137filter function, 140fold function, 140–141isEmpty function, 138iter function, 139length property, 138map function, 139reduce function, 141sortBy function, 140sort function, 139sumBy function, 142sum function, 141
seq<'T> type abbreviation, 134sequence expressions, 134–135
defined, 134yielding results, 135
sequences, 46, 134–142aggregating, 140–142defined, 134empty, 136–137filtering, 140initializing, 137iterating over, 139length of, 138–139sorting, 139–140transforming, 139
set difference operator (-), 154Set module
difference function, 154intersect function, 154isProperSubset function, 154isProperSuperset function, 154isSubset function, 154isSuperset function, 154union function, 153
sets, 152–155creating, 152–153defined, 152differences, 154intersections, 154subsets and supersets, 154unions, 153
Set<'T> class, 153set union operator (+), 153ShapeCombination active pattern, 195, 196ShapeLambda active pattern, 195, 196ShapeVar active pattern, 195, 196side effects, 26–27
single data type, 35Singleton pattern, 66SI units, 178Skip extension method, 76skip operator (query expressions), 211skipWhile operator (query
expressions), 211slice expressions, 76–77, 145, 147–149snd function, 114sortByDescending operator (query
expressions), 209sortByNullableDescending operator (query
expressions), 209sortByNullable operator (query
expressions), 209sortBy operator (query expressions), 209SpecificCall active pattern, 196sprintf function, 58statically resolved type parameters (^),
49, 52static cast operator (:>), 82static class, 88static keyword, 88, 89static members
constructors, 88–89fields, 89initializers, 88–89methods, 90–91properties, 89–90
string concatenation operator (+), 38string concatenation operator, ML style
(^), 38String class
Concat method, 38Format method, 58Join method, 38Split method, 71
string data type, 37strings, 37
concatenation, 38formatting, 58literal, 37triple-quoted, 38verbatim, 38
StructAttribute, 80structs, 80–81structures, 80–81subtraction operator (-), 35sumByNullable operator (query
expressions), 214sumBy operator (query expressions), 213
The Book of F# © 2014 by Dave Fancher
Index 281
switch statement (C#), 127, 160symbols
COMPILED, 21DEBUG, 21INTERACTIVE, 21RELEASE, 21
SyncLock statement (Visual Basic), 232syntactic tuples, 115–116
Ttail-call recursion, 110–111Take extension method, 76take operator (query expressions),
211–212takeWhile operator (query
expressions), 211Task class
constructor, 235ContinueWith method, 237, 238Factory property, 235Start method, 235WaitAll method, 237WaitAny method, 237
TaskFactory class, 235, 236, 238ContinueWhenAll method, 238, 239ContinueWhenAny method, 238, 239StartNew method, 235StartNew<'T> method, 236Wait method, 236
task parallelism, 230–231, 234–241Task Parallel Library (TPL),
230–241, 249tasks
cancelling, 239–240continuations, 237–239creating and starting, 234–235exception handling, 240–241returning values from, 235–236waiting for completion, 236–237
Task<'T> class, 235, 236, 238Task<'T>.Result property, 236templates, project, 2–4thenByDescending operator (query
expressions), 210thenByNullableDescending operator (query
expressions), 210thenByNullable operator (query
expressions), 210thenBy operator (query expressions), 210then keyword, constructors, 67timing (F# Interactive), 17
TPL (Task Parallel Library), 230–241, 249
ToFSharpFunc method, 105tokens, string formatting, 58to keyword (simple for loops), 46Trigger function (events), 79triple-quoted strings, 38try...finally expressions, 53, 55TryFinally method (computation
expressions), 259TryGetReflectedDefinition method, 191try...with expressions, 53TryWith method (computation
expressions), 259tuple delimiter (*), 113Tuple patterns, 114, 166–167tuples, 113–114
for out parameters, 116–117syntactic, 115–116
type abbreviations, 33, 59Type-Annotated patterns, 169–170type annotations
defined, 40with units of measure, 181
type augmentations. See type extensions
type extensions, 99–100intrinsic, 99optional, 99
type functions, 137type inference, 34, 39type keyword, 59, 118, 123
classes, 64interfaces, 93
type providers, 221–228available providers, 222–223defined, 221security warning, 224
Uuint16 data type, 34uint32 data type, 34uint64 data type, 34uint data type, 34unary negative operator (-), 35unary positive operator (+), 35unativeint data type, 35Unicode, 37union case delimiter (|), 127Union Case patterns, 164–165unit data type, 42, 104
The Book of F# © 2014 by Dave Fancher
282 Index
unit value (()), 42units of measure
applying, 179–180conversions, 182–183defined, 178enforcing, 181formulas, 178–179generic, 184measure annotations, 179–180measure-aware types, 184–185ranges, 182stripping, 180–181
upcasting, 82–83use bindings
defined, 30within modules, 31
use! keywordasynchronous workflows, 242computation expressions, 259
use keywordcomputation expressions, 259defined, 30
using directive (C#), 59using function
C# implementation, 32defined, 31
Using method (computation expressions), 259
using statement (C#), 30
Vval
F# Interactive, 15keyword (explicit fields), 67, 68, 81
Value active pattern, 196, 198value types, 81Variable patterns, 163variables, 27var keyword (C#), 39Var type, 190verbatim string prefix (@), 38verbatim strings, 38
verbose syntax, 6virtual members, 84, 87virtual modifier (C#), 87void type (C#), 42
Wwhere operator (query expressions), 204while loops, 46While method (computation
expressions), 259whitespace, significance of, 5–6Wildcard patterns (_)
exception handling, 53generics, 52defined, 115, 163
with keywordobject expressions, 98property accessors, 70type extensions, 100
workflows. See asynchronous workflows; computation expressions
XXML comments (///), 60–61
YYieldFrom method (computation
expressions), 259, 266yield! keyword (computation
expressions), 259, 266yield keyword
computation expressions, 259defined, 135
Yield method (computation expressions), 259, 261, 263, 266
ZZero method (computation expressions),
260, 266
The Book of F# © 2014 by Dave Fancher