i n d ex [nostarch.com] · array expressions, 142–143 keyword, 143 array2d module, 147 array2d...

12
INDEX Symbols (|...|) (active patterns), 173–174 [|...|] (array expressions), 142 <- operator (assignment), 29, 71, 120 * (asterisk) multiplication operator, 35 tuple delimiter, 113 @ (at) list concatenation operator, 151–152 verbatim 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, 154 subtraction operator, 35 unary 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, 35 set union operator, 153 string concatenation operator, 38 unary 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, 112 sequence expressions, 135 - (set difference operator), 154 [...] (square brackets) indexed properties, 71 list 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

Upload: others

Post on 23-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 2: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 3: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 4: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 5: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 6: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 7: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 8: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 9: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 10: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 11: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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

Page 12: i n D ex [nostarch.com] · array expressions, 142–143 keyword, 143 Array2D module, 147 array2D operator, 147 Array3D module, 147 ArrayList class, 49, 133–134 Array module copy

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