ebook img

Haskell Programming from First Principles PDF

1285 Pages·02.973 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Haskell Programming from First Principles

i Reader feedback “Astonishinglyinsightfulexamples. Thisbookisalotlikehavinga good teacher — it never fails to provide the low-end information eventhoughIhavealreadymovedon. Sojustlikeagoodteacherisn’t presumptuousinwhatI’msupposedtoknow(whichmightforceme totryandsavefaceincaseIdonot,yet),informationconveniently resurfaces.” –DavidDeutsch “When@haskellbookisdone,itwillbeanunexpectedmilestone for#haskell. TherewillforeverbeHaskellbefore,andHaskellafter.” –JasonKuhrt “IfeelsaferecommendingHaskelltobeginnersnowthat@haskell- bookisavailable,whichisverybeginnerfriendly”–GabrielGonzalez “”Structure and Interpretation of Computer Programs” has its credit, but @haskellbook is now my #1 recommendation for FP beginners.” –IrioMusskopf “The book is long, but not slow — a large fraction of it is made upofexamplesandexercises. Youcantellit’swrittenbysomeone who’staughtHaskelltoprogrammersbefore.” –ChristopherJones “IalreadyhavealotofexperiencewithHaskell,butI’veneverfelt confidentinitthewaythisbookhasmademefeel.” –AlainO’Dea “Realdealwith@haskellbookisthatyoudon’tjustlearnHaskell; yougetahandsonexperienceastowhyfunctionalprogramming works.” –GeorgeMakrydakis “One of my goals this year is to evangelize @haskellbook and @HaskellForMac. I think these tools will make anyone who uses thembetter. IwanttogetcomfortablewithitsothatIcanshifthow IthinkaboutSwift.” –JanieClayton Contents Readerfeedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Contents ii Authors’preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xx WhyThisBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xx Afewwordstonewprogrammers . . . . . . . . . . . . . . . . . xxiii Haskevangelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiv What’sinthisbook? . . . . . . . . . . . . . . . . . . . . . . . . . . xxvi Bestpracticesforexamplesandexercises . . . . . . . . . . . . xxix 1 AllYouNeedisLambda 1 1.1 AllYouNeedisLambda . . . . . . . . . . . . . . . . . . . . 2 1.2 Whatisfunctionalprogramming? . . . . . . . . . . . . . 2 1.3 Whatisafunction? . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Thestructureoflambdaterms . . . . . . . . . . . . . . . 5 1.5 Betareduction . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.6 Multiplearguments . . . . . . . . . . . . . . . . . . . . . . 10 1.7 Evaluationissimplification. . . . . . . . . . . . . . . . . . 14 1.8 Combinators . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.9 Divergence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.11 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 17 1.12 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.13 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.14 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 23 2 Hello,Haskell! 24 2.1 Hello,Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ii CONTENTS iii 2.2 InteractingwithHaskellcode . . . . . . . . . . . . . . . . 25 2.3 Understandingexpressions. . . . . . . . . . . . . . . . . . 28 2.4 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.5 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.6 Infixoperators . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.7 Declaringvalues . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.8 ArithmeticfunctionsinHaskell . . . . . . . . . . . . . . . 45 2.9 Parenthesization . . . . . . . . . . . . . . . . . . . . . . . . 52 2.10 Letandwhere . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.11 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 60 2.12 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.13 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 64 3 Strings 65 3.1 Printingstrings . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.2 Afirstlookattypes . . . . . . . . . . . . . . . . . . . . . . . 66 3.3 Printingsimplestrings . . . . . . . . . . . . . . . . . . . . 67 3.4 Top-levelversuslocaldefinitions . . . . . . . . . . . . . . 72 3.5 Typesofconcatenationfunctions . . . . . . . . . . . . . 74 3.6 Concatenationandscoping . . . . . . . . . . . . . . . . . 76 3.7 Morelistfunctions . . . . . . . . . . . . . . . . . . . . . . . 79 3.8 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 81 3.9 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4 Basicdatatypes 86 4.1 BasicDatatypes . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.2 Whataretypes? . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.3 Anatomyofadatadeclaration . . . . . . . . . . . . . . . 87 4.4 Numerictypes . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.5 Comparingvalues . . . . . . . . . . . . . . . . . . . . . . . 96 4.6 GoonandBoolme . . . . . . . . . . . . . . . . . . . . . . . 99 4.7 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 4.8 Lists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 4.9 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 109 4.10 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 4.11 Namesandvariables . . . . . . . . . . . . . . . . . . . . . . 115 5 Types 117 5.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 CONTENTS iv 5.2 Whataretypesfor? . . . . . . . . . . . . . . . . . . . . . . . 118 5.3 Howtoreadtypesignatures . . . . . . . . . . . . . . . . . 120 5.4 Currying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 5.5 Polymorphism. . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.6 Typeinference . . . . . . . . . . . . . . . . . . . . . . . . . 142 5.7 Assertingtypesfordeclarations . . . . . . . . . . . . . . . 146 5.8 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 147 5.9 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 5.10 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 161 6 Typeclasses 162 6.1 Typeclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 6.2 Whataretypeclasses? . . . . . . . . . . . . . . . . . . . . . 163 6.3 BacktoBool . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 6.4 Eq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 6.5 Writingtypeclassinstances . . . . . . . . . . . . . . . . . . 169 6.6 Num . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 6.7 Type-defaultingtypeclasses . . . . . . . . . . . . . . . . . 182 6.8 Ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 6.9 Enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 6.10 Show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 6.11 Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 6.12 Instancesaredispatchedbytype . . . . . . . . . . . . . . 199 6.13 Gimmemoreoperations . . . . . . . . . . . . . . . . . . . 203 6.14 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 206 6.15 ChapterDefinitions . . . . . . . . . . . . . . . . . . . . . . 211 6.16 Typeclassinheritance,partial . . . . . . . . . . . . . . . . 214 6.17 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 214 7 Morefunctionalpatterns 215 7.1 Makeitfunc-y . . . . . . . . . . . . . . . . . . . . . . . . . . 216 7.2 Argumentsandparameters . . . . . . . . . . . . . . . . . 216 7.3 Anonymousfunctions . . . . . . . . . . . . . . . . . . . . . 223 7.4 Patternmatching . . . . . . . . . . . . . . . . . . . . . . . . 226 7.5 Caseexpressions . . . . . . . . . . . . . . . . . . . . . . . . 236 7.6 Higher-orderfunctions . . . . . . . . . . . . . . . . . . . . 239 7.7 Guards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 7.8 Functioncomposition . . . . . . . . . . . . . . . . . . . . . 253 7.9 Pointfreestyle . . . . . . . . . . . . . . . . . . . . . . . . . . 257 CONTENTS v 7.10 Demonstratingcomposition . . . . . . . . . . . . . . . . . 259 7.11 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 262 7.12 ChapterDefinitions . . . . . . . . . . . . . . . . . . . . . . 266 7.13 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 274 8 Recursion 275 8.1 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 8.2 Factorial! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 8.3 Bottom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 8.4 Fibonaccinumbers . . . . . . . . . . . . . . . . . . . . . . . 286 8.5 Integraldivisionfromscratch . . . . . . . . . . . . . . . . 289 8.6 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 294 8.7 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 9 Lists 300 9.1 Lists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 9.2 Thelistdatatype . . . . . . . . . . . . . . . . . . . . . . . . 301 9.3 Patternmatchingonlists . . . . . . . . . . . . . . . . . . . 302 9.4 List’ssyntacticsugar . . . . . . . . . . . . . . . . . . . . . . 304 9.5 Usingrangestoconstructlists . . . . . . . . . . . . . . . . 305 9.6 Extractingportionsoflists . . . . . . . . . . . . . . . . . . 308 9.7 Listcomprehensions . . . . . . . . . . . . . . . . . . . . . . 312 9.8 Spinesandnonstrictevaluation . . . . . . . . . . . . . . . 318 9.9 Transforminglistsofvalues . . . . . . . . . . . . . . . . . 327 9.10 Filteringlistsofvalues . . . . . . . . . . . . . . . . . . . . . 334 9.11 Zippinglists . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 9.12 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 339 9.13 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 9.14 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 347 10 Foldinglists 348 10.1 Folds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 10.2 Bringingyouintothefold . . . . . . . . . . . . . . . . . . 349 10.3 Recursivepatterns . . . . . . . . . . . . . . . . . . . . . . . 351 10.4 Foldright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 10.5 Foldleft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 10.6 Howtowritefoldfunctions . . . . . . . . . . . . . . . . . 368 10.7 Foldingandevaluation . . . . . . . . . . . . . . . . . . . . 373 10.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 CONTENTS vi 10.9 Scans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 10.10 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 379 10.11 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 10.12 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 386 11 Algebraicdatatypes 387 11.1 Algebraicdatatypes. . . . . . . . . . . . . . . . . . . . . . . 388 11.2 Datadeclarationsreview . . . . . . . . . . . . . . . . . . . 388 11.3 Dataandtypeconstructors . . . . . . . . . . . . . . . . . . 390 11.4 Typeconstructorsandkinds . . . . . . . . . . . . . . . . . 392 11.5 Dataconstructorsandvalues . . . . . . . . . . . . . . . . 393 11.6 What’satypeandwhat’sdata? . . . . . . . . . . . . . . . 397 11.7 Dataconstructorarities . . . . . . . . . . . . . . . . . . . . 400 11.8 Whatmakesthesedatatypesalgebraic? . . . . . . . . . . 403 11.9 newtype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 11.10 Sumtypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 11.11 Producttypes . . . . . . . . . . . . . . . . . . . . . . . . . . 414 11.12 Normalform . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 11.13 Constructinganddeconstructingvalues . . . . . . . . . 421 11.14 Functiontypeisexponential. . . . . . . . . . . . . . . . . 435 11.15 Higher-kindeddatatypes . . . . . . . . . . . . . . . . . . . 441 11.16 Listsarepolymorphic . . . . . . . . . . . . . . . . . . . . . 443 11.17 BinaryTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 11.18 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 452 11.19 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 12 Signalingadversity 461 12.1 Signalingadversity . . . . . . . . . . . . . . . . . . . . . . . 462 12.2 HowIlearnedtostopworryingandloveNothing . . . 462 12.3 Bleatingeither . . . . . . . . . . . . . . . . . . . . . . . . . . 465 12.4 Kinds,athousandstarsinyourtypes . . . . . . . . . . . 471 12.5 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 480 12.6 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 13 Buildingprojects 492 13.1 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 13.2 MakingpackageswithStack . . . . . . . . . . . . . . . . . 494 13.3 Workingwithabasicproject . . . . . . . . . . . . . . . . . 495 13.4 Makingourprojectalibrary . . . . . . . . . . . . . . . . . 498 CONTENTS vii 13.5 Moduleexports . . . . . . . . . . . . . . . . . . . . . . . . . 500 13.6 Moreonimportingmodules. . . . . . . . . . . . . . . . . 502 13.7 Makingourprograminteractive . . . . . . . . . . . . . . 507 13.8 dosyntaxandIO . . . . . . . . . . . . . . . . . . . . . . . . 510 13.9 Hangmangame . . . . . . . . . . . . . . . . . . . . . . . . . 514 13.10 StepOne: Importingmodules . . . . . . . . . . . . . . . 516 13.11 StepTwo: Generatingawordlist . . . . . . . . . . . . . . 519 13.12 StepThree: Makingapuzzle . . . . . . . . . . . . . . . . 522 13.13 Addinganewtype. . . . . . . . . . . . . . . . . . . . . . . . 530 13.14 Chapterexercises . . . . . . . . . . . . . . . . . . . . . . . . 531 13.15 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 534 14 Testing 535 14.1 Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 14.2 Aquicktouroftestingfortheuninitiated . . . . . . . . 536 14.3 Conventionaltesting . . . . . . . . . . . . . . . . . . . . . . 538 14.4 EnterQuickCheck . . . . . . . . . . . . . . . . . . . . . . . 545 14.5 Morsecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 14.6 Arbitraryinstances . . . . . . . . . . . . . . . . . . . . . . . 565 14.7 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 573 14.8 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 14.9 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 580 15 Monoid,Semigroup 581 15.1 Monoidsandsemigroups . . . . . . . . . . . . . . . . . . . 582 15.2 Whatwetalkaboutwhenwetalkaboutalgebras . . . . 582 15.3 Monoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 15.4 HowMonoidisdefinedinHaskell . . . . . . . . . . . . . 584 15.5 ExamplesofusingMonoid . . . . . . . . . . . . . . . . . . 585 15.6 WhyIntegerdoesn’thaveaMonoid . . . . . . . . . . . . 586 15.7 Whybother? . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 15.8 Laws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 15.9 Differentinstance,samerepresentation . . . . . . . . . 594 15.10 Reusingalgebrasbyaskingforalgebras. . . . . . . . . . 596 15.11 Madness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 15.12 BetterlivingthroughQuickCheck . . . . . . . . . . . . . 605 15.13 Semigroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 15.14 Strengthcanbeweakness . . . . . . . . . . . . . . . . . . . 615 15.15 Chapterexercises . . . . . . . . . . . . . . . . . . . . . . . . 617 CONTENTS viii 15.16 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 15.17 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 625 16 Functor 626 16.1 Functor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 16.2 What’safunctor? . . . . . . . . . . . . . . . . . . . . . . . . 628 16.3 There’sawholelotoffmapgoin’round . . . . . . . . . . 629 16.4 Let’stalkabout𝑓,baby . . . . . . . . . . . . . . . . . . . . 631 16.5 FunctorLaws . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 16.6 TheGood,theBad,andtheUgly . . . . . . . . . . . . . . 641 16.7 Commonlyusedfunctors . . . . . . . . . . . . . . . . . . 645 16.8 Transformingtheunappliedtypeargument . . . . . . 657 16.9 QuickCheckingFunctorinstances . . . . . . . . . . . . . 660 16.10 Exercises: InstancesofFunc . . . . . . . . . . . . . . . . . 663 16.11 Ignoringpossibilities . . . . . . . . . . . . . . . . . . . . . . 663 16.12 Asomewhatsurprisingfunctor . . . . . . . . . . . . . . . 669 16.13 Morestructure,morefunctors . . . . . . . . . . . . . . . 672 16.14 IOFunctor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 16.15 Whatifwewanttodosomethingdifferent? . . . . . . . 675 16.16 Functorsareuniquetoadatatype . . . . . . . . . . . . . 678 16.17 Chapterexercises . . . . . . . . . . . . . . . . . . . . . . . . 679 16.18 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 16.19 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 685 17 Applicative 686 17.1 Applicative . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 17.2 DefiningApplicative . . . . . . . . . . . . . . . . . . . . . . 687 17.3 Functorvs. Applicative . . . . . . . . . . . . . . . . . . . . 689 17.4 Applicativefunctorsaremonoidalfunctors . . . . . . . 691 17.5 Applicativeinuse . . . . . . . . . . . . . . . . . . . . . . . . 696 17.6 Applicativelaws . . . . . . . . . . . . . . . . . . . . . . . . . 721 17.7 Youknewthiswascoming . . . . . . . . . . . . . . . . . . 727 17.8 ZipListMonoid . . . . . . . . . . . . . . . . . . . . . . . . . 730 17.9 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 741 17.10 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742 17.11 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 743 18 Monad 744 18.1 Monad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 CONTENTS ix 18.2 Sorry—amonadisnotaburrito . . . . . . . . . . . . . 745 18.3 Dosyntaxandmonads . . . . . . . . . . . . . . . . . . . . 753 18.4 ExamplesofMonaduse . . . . . . . . . . . . . . . . . . . . . 759 18.5 Monadlaws . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776 18.6 Applicationandcomposition . . . . . . . . . . . . . . . . 783 18.7 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 788 18.8 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789 18.9 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 791 19 Applyingstructure 792 19.1 Appliedstructure . . . . . . . . . . . . . . . . . . . . . . . . 793 19.2 Monoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 19.3 Functor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 19.4 Applicative . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 19.5 Monad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806 19.6 Anend-to-endexample: URLshortener . . . . . . . . . 807 19.7 That’sawrap! . . . . . . . . . . . . . . . . . . . . . . . . . . 820 19.8 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 821 20Foldable 822 20.1 Foldable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823 20.2 TheFoldableclass . . . . . . . . . . . . . . . . . . . . . . . . 823 20.3 Revengeofthemonoids . . . . . . . . . . . . . . . . . . . 824 20.4 DemonstratingFoldableinstances . . . . . . . . . . . . . 828 20.5 Somebasicderivedoperations . . . . . . . . . . . . . . . 831 20.6 ChapterExercises . . . . . . . . . . . . . . . . . . . . . . . . 836 20.7 Follow-upresources . . . . . . . . . . . . . . . . . . . . . . 837 21 Traversable 838 21.1 Traversable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 21.2 TheTraversabletypeclassdefinition . . . . . . . . . . . . 839 21.3 sequenceA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840 21.4 traverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842 21.5 So,what’sTraversablefor? . . . . . . . . . . . . . . . . . . . 844 21.6 Morsecoderevisited . . . . . . . . . . . . . . . . . . . . . . 845 21.7 Axingtediouscode . . . . . . . . . . . . . . . . . . . . . . . 848 21.8 Doallthethings . . . . . . . . . . . . . . . . . . . . . . . . . 850 21.9 Traversableinstances . . . . . . . . . . . . . . . . . . . . . 852 21.10 TraversableLaws . . . . . . . . . . . . . . . . . . . . . . . . . 854

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.