[Rename chapter files Bryan O'Sullivan **20080824042702] { move ./en/ch01-whyfp.xml ./en/ch00-whyfp.xml move ./en/ch02-starting.xml ./en/ch01-starting.xml move ./en/ch03-funcs-types.xml ./en/ch02-funcs-types.xml move ./en/ch04-defining-types.xml ./en/ch03-defining-types.xml move ./en/ch05-fp.xml ./en/ch04-fp.xml move ./en/ch06-library.xml ./en/ch05-library.xml move ./en/ch07-typeclasses.xml ./en/ch06-typeclasses.xml move ./en/ch08-io.xml ./en/ch07-io.xml move ./en/ch09-globs-and-regexps.xml ./en/ch08-globs-and-regexps.xml move ./en/ch10-find-dsl.xml ./en/ch09-find-dsl.xml move ./en/ch11-binary.xml ./en/ch10-binary.xml move ./en/ch12-testing.xml ./en/ch11-testing.xml move ./en/ch13-barcode.xml ./en/ch12-barcode.xml move ./en/ch14-data.xml ./en/ch13-data.xml move ./en/ch15-monads.xml ./en/ch14-monads.xml move ./en/ch16-monad-case.xml ./en/ch15-monad-case.xml move ./en/ch17-parsec.xml ./en/ch16-parsec.xml move ./en/ch18-ffi.xml ./en/ch17-ffi.xml move ./en/ch19-monad-trans.xml ./en/ch18-monad-trans.xml move ./en/ch20-errors.xml ./en/ch19-errors.xml move ./en/ch21-systems.xml ./en/ch20-systems.xml move ./en/ch22-databases.xml ./en/ch21-databases.xml move ./en/ch23-webclient.xml ./en/ch22-webclient.xml move ./en/ch24-gui.xml ./en/ch23-gui.xml move ./en/ch25-concurrent.xml ./en/ch24-concurrent.xml move ./en/ch26-profiling.xml ./en/ch25-profiling.xml move ./en/ch27-advanced-haskell.xml ./en/ch26-advanced-haskell.xml move ./en/ch28-sockets.xml ./en/ch27-sockets.xml move ./en/ch29-stm.xml ./en/ch28-stm.xml hunk ./en/ch00-preface.xml 1 - - - - Preface - - We use Haskell every day to solve problems that require - programming. You can, too, and we're writing this book to show - you how. - - Why do we like Haskell? It provides a combination of - abstraction and concreteness that let us address a wide range of - problem sizes. When we have small problems to solve, we write - short programs that would normally be considered the domain of - scripting languages, because Haskell is expressive - and has good standard libraries. When we need to write larger and - more demanding applications, Haskell's robustness and - composability help us to build maintainable code that we can adapt - quickly to changes in circumstance. - - - Who is this book for? - - We're writing this book for you, the curious programmer. We - assume that you can already program in a language like Python, - C, or Java, but that's as far as our assumptions about you - go. - - Actually, that's not quite complete. We have made a - few more assumptions about you. - - We assume that you're reading this book because you want to - learn lots of interesting stuff, and to have fun, and - occasionally to pump your fist and shout Wow! I - get it! - - We assume that you are willing to put in some practice, to - help a new idea or technique to stick in your - mind. - - But really, that's it for our assumptions about you. For - example, your educational background isn't important. What - is important is a willingness to explore - new territory. - - Maybe you've never used a functional language. No problem. - We'll take you through the basics at a brisk pace, and we won't - talk down to you. - - If you have used some other functional - language, we'll point out areas where an appropriate way of - tackling a problem in a different language might lead you into - trouble with Haskell. - - - - How to read this book - - We've put this book together so that each chapter builds on - material we've covered in prior chapters. If you're unfamiliar - with functional programming or Haskell, you should start at the - beginning. - - In every chapter, we've interlaced the material with - exercises. We think that taking the time to solve them is a - great idea, one that will pay you back hugely. Don't just think - about how you would solve an exercise; sit - in front of a computer and write working code! - - We've written our examples as real Haskell programs that you - can modify, compile and run. Some exercises will refer you to - particular example programs that we'll ask you to change. - - With exploration comes the risk of occasionally getting - lost. We'll be trying to anticipate your questions as we go, - but maybe once in a while we'll take a step a little too - quickly. Any time you feel like you're not quite getting it - yet, relax. Pretty often your best - approach will be to try a few coding exercises, to explore a - topic where we didn't make things clear enough. Nothing will - help you learn better than practice and a willingness to try a - few different ways around an obstacle. - - We have a few important non-goals in - writing this book. The first is that we're not triumphalists; - when we say nice things about functional programming, we're not - implicitly saying bad things about someone else's cherished way - of getting things done. - - We will not sugar-coat problem topics. No language is - perfect; neither is any language's standard library. When we - cover aspects of the language or libraries that are less than - perfect, we'll be clear about what the limitations are. - - - - rmfile ./en/ch00-preface.xml hunk ./en/00book.xml 10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hunk ./en/00book.xml 77 - Don - Stewart + John + Goerzen hunk ./en/00book.xml 82 - John - Goerzen + Don + Stewart hunk ./en/00book.xml 97 - Don Stewart hunk ./en/00book.xml 98 + Don Stewart hunk ./en/00book.xml 142 - &ch29; }