Real World Haskell. Code You Can Believe In
![Język publikacji: angielski Język publikacji: angielski](https://static01.helion.com.pl/global/flagi/1.png)
![Real World Haskell. Code You Can Believe In Bryan O'Sullivan, John Goerzen, Donald Bruce Stewart - okładka ebooka](https://static01.helion.com.pl/global/okladki/326x466/e_2gcj.png)
![Real World Haskell. Code You Can Believe In Bryan O'Sullivan, John Goerzen, Donald Bruce Stewart - tył okładki ebooka](https://static01.helion.com.pl/global/okladki-tyl/326x466/e_2gcj.png)
- Ocena:
- 6.0/6 Opinie: 2
- Stron:
- 714
- Dostępne formaty:
-
ePubMobi
Opis ebooka: Real World Haskell. Code You Can Believe In
This easy-to-use, fast-moving tutorial introduces you to functional programming with Haskell. You'll learn how to use Haskell in a variety of practical ways, from short scripts to large and demanding applications. Real World Haskell takes you through the basics of functional programming at a brisk pace, and then helps you increase your understanding of Haskell in real-world issues like I/O, performance, dealing with data, concurrency, and more as you move through each chapter.
With this book, you will:
- Understand the differences between procedural and functional programming
- Learn the features of Haskell, and how to use it to develop useful programs
- Interact with filesystems, databases, and network services
- Write solid code with automated tests, code coverage, and error handling
- Harness the power of multicore systems via concurrent and parallel programming
You'll find plenty of hands-on exercises, along with examples of real Haskell programs that you can modify, compile, and run. Whether or not you've used a functional language before, if you want to understand why Haskell is coming into its own as a practical language in so many major organizations, Real World Haskell is the best place to start.
Wybrane bestsellery
-
This instructive book takes you step by step through ways to track, merge, and manage both open source and commercial software projects with Mercurial, using Windows, Mac OS X, Linux, Solaris, and other systems. Mercurial is the easiest system to learn when it comes to distributed revision contro...
Mercurial: The Definitive Guide. The Definitive Guide Mercurial: The Definitive Guide. The Definitive Guide
(125.93 zł najniższa cena z 30 dni)125.83 zł
149.00 zł(-16%) -
Dzięki tej książce dowiesz się, jak pozyskiwać, analizować i wizualizować dane, a potem używać ich do rozwiązywania problemów biznesowych. Wystarczy, że znasz podstawy Pythona i matematyki na poziomie liceum, aby zacząć stosować naukę o danych w codziennej pracy. Znajdziesz tu szereg praktycznych...
Data science i Python. Stawianie czoła najtrudniejszym wyzwaniom biznesowym Data science i Python. Stawianie czoła najtrudniejszym wyzwaniom biznesowym
(48.30 zł najniższa cena z 30 dni)44.85 zł
69.00 zł(-35%) -
Dzięki tej książce poznasz od podstaw Gita i GitLaba. Dowiesz się, jak skonfigurować runnery GitLaba, a także jak tworzyć i konfigurować potoki dla różnych etapów cyklu rozwoju oprogramowania. Poznasz zasady interpretacji wyników potoków w GitLabie. Nauczysz się też wdrażania kodu w różnych środo...
Automatyzacja metodyki DevOps za pomocą potoków CI/CD GitLaba. Buduj efektywne potoki CI/CD do weryfikacji, zabezpieczenia i wdrażania kodu, korzystając z rzeczywistych przykładów Automatyzacja metodyki DevOps za pomocą potoków CI/CD GitLaba. Buduj efektywne potoki CI/CD do weryfikacji, zabezpieczenia i wdrażania kodu, korzystając z rzeczywistych przykładów
(55.30 zł najniższa cena z 30 dni)51.35 zł
79.00 zł(-35%) -
ChatGPT, chatbot opracowany i udostępniony przez firmę OpenAI, szybko stał się obiektem zainteresowania internautów na całym świecie — i na nowo wzbudził gorące dyskusje wokół sztucznej inteligencji. Ludzie mediów prześcigają się w skrajnych wizjach, jedni podchodzą do tematu entuzjastyczni...(10.95 zł najniższa cena z 30 dni)
13.14 zł
21.90 zł(-40%) -
Mam wrażenie, że wokół sieci neuronowych narosło wiele mitów. Nawet niektórzy starsi członkowie mojej rodziny na hasło "sztuczna inteligencja" robią posępną minę, niezależnie od tego, czy mowa jest o generowaniu obrazów czy - na przykład - o rozpoznawaniu odręcznego pisma czy też tłumaczeniu teks...(24.57 zł najniższa cena z 30 dni)
24.57 zł
28.90 zł(-15%) -
Tę książkę docenią przede wszystkim inżynierowie oprogramowania, programiści i administratorzy systemów, którzy muszą szybko zrozumieć praktyki DevOps. Znajdziesz tu bezcenną wiedzę, która ułatwi Ci efektywną pracę z nowoczesnym stosem aplikacji i sprawne przystąpienie do zadań związanych z DevOp...
DevOps dla zdesperowanych. Praktyczny poradnik przetrwania DevOps dla zdesperowanych. Praktyczny poradnik przetrwania
(40.20 zł najniższa cena z 30 dni)43.55 zł
67.00 zł(-35%) -
Książkę szczególnie docenią analitycy bezpieczeństwa, którzy chcą się zapoznać z zestawem poleceń ARM i zdobyć wiedzę umożliwiającą im efektywne korzystanie z technik inżynierii wstecznej. Poza zestawem potrzebnych poleceń znalazło się w niej mnóstwo przydatnych informacji. Znajdziesz tu przegląd...
Niebieski lis. Polecenia procesorów Arm i inżynieria wsteczna Niebieski lis. Polecenia procesorów Arm i inżynieria wsteczna
(53.40 zł najniższa cena z 30 dni)57.84 zł
89.00 zł(-35%) -
Jeśli w swojej pracy masz lub miewasz do czynienia z danymi, z pewnością orientujesz się, że do tego celu stworzono dotąd całkiem sporo narzędzi. Nic dziwnego – przy tej liczbie danych, z jaką spotykamy się w dzisiejszym cyfrowym świecie, zdolność do ich sprawnego analizowania i wyciągania ...
Grafana. Kurs video. Monitorowanie, analiza i wizualizacja danych w czasie rzeczywistym Grafana. Kurs video. Monitorowanie, analiza i wizualizacja danych w czasie rzeczywistym
(39.90 zł najniższa cena z 30 dni)104.25 zł
139.00 zł(-25%) -
Tę książkę docenią praktycy: inżynierowie uczenia maszynowego i analitycy danych, poszukujący sposobu praktycznego zaadaptowania modeli transformacyjnych do swoich potrzeb. Autorzy skupili się na praktycznej stronie tworzenia aplikacji językowych, a w poszczególnych rozdziałach ujęto wszystkie na...
Przetwarzanie języka naturalnego z wykorzystaniem transformerów. Budowanie aplikacji językowych za pomocą bibliotek Hugging Face Przetwarzanie języka naturalnego z wykorzystaniem transformerów. Budowanie aplikacji językowych za pomocą bibliotek Hugging Face
(59.40 zł najniższa cena z 30 dni)64.35 zł
99.00 zł(-35%) -
Wraz z rozwojem sztucznej inteligencji i modeli językowych – a niewątpliwie żyjemy w czasach eksplozji AI – rośnie znaczenie osób będących w stanie w praktyce sięgać po zasoby, jakie oferuje nam ta nowoczesna technologia. Okazuje się, że pośród rozmaitych innych umiejętności potrafi o...
Prompt engineering. Kurs video. Precyzyjne tworzenie zapytań dla modeli AI Prompt engineering. Kurs video. Precyzyjne tworzenie zapytań dla modeli AI
(84.50 zł najniższa cena z 30 dni)126.75 zł
169.00 zł(-25%)
Ebooka "Real World Haskell. Code You Can Believe In" przeczytasz na:
-
czytnikach Inkbook, Kindle, Pocketbook, Onyx Boox i innych
-
systemach Windows, MacOS i innych
-
systemach Windows, Android, iOS, HarmonyOS
-
na dowolnych urządzeniach i aplikacjach obsługujących formaty: PDF, EPub, Mobi
Masz pytania? Zajrzyj do zakładki Pomoc »
Audiobooka "Real World Haskell. Code You Can Believe In" posłuchasz:
-
w aplikacji Ebookpoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych
-
na dowolnych urządzeniach i aplikacjach obsługujących format MP3 (pliki spakowane w ZIP)
Masz pytania? Zajrzyj do zakładki Pomoc »
Kurs Video "Real World Haskell. Code You Can Believe In" zobaczysz:
-
w aplikacjach Ebookpoint i Videopoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych z dostępem do najnowszej wersji Twojej przeglądarki internetowej
Szczegóły ebooka
- ISBN Ebooka:
- 978-05-965-5430-9, 9780596554309
- Data wydania ebooka:
-
2008-11-15
Data wydania ebooka często jest dniem wprowadzenia tytułu do sprzedaży i może nie być równoznaczna z datą wydania książki papierowej. Dodatkowe informacje możesz znaleźć w darmowym fragmencie. Jeśli masz wątpliwości skontaktuj się z nami sklep@ebookpoint.pl.
- Język publikacji:
- angielski
- Rozmiar pliku ePub:
- 2.4MB
- Rozmiar pliku Mobi:
- 6.6MB
Spis treści ebooka
- Real World Haskell
- Dedication
- A Note Regarding Supplemental Files
- Preface
- Have We Got a Deal for You!
- Novelty
- Power
- Enjoyment
- Have We Got a Deal for You!
- What to Expect from This Book
- A Little Bit About You
- What to Expect from Haskell
- Compared to Traditional Static Languages
- Compared to Modern Dynamic Languages
- Haskell in Industry and Open Source
- Compilation, Debugging, and Performance Analysis
- Bundled and Third-Party Libraries
- A Brief Sketch of Haskells History
- Prehistory
- Early Antiquity
- The Modern Era
- Helpful Resources
- Reference Material
- Applications and Libraries
- The Haskell Community
- Conventions Used in This Book
- Using Code Examples
- Safari Books Online
- How to Contact Us
- Acknowledgments
- Bryan
- John
- Don
- Thank You to Our Reviewers
- 1. Getting Started
- Your Haskell Environment
- Getting Started with ghci, the Interpreter
- Basic Interaction: Using ghci as a Calculator
- Simple Arithmetic
- An Arithmetic Quirk: Writing Negative Numbers
- Boolean Logic, Operators, and Value Comparisons
- Operator Precedence and Associativity
- Undefined Values, and Introducing Variables
- Dealing with Precedence and Associativity Rules
- Command-Line Editing in ghci
- Lists
- Operators on Lists
- Strings and Characters
- First Steps with Types
- A Simple Program
- 2. Types and Functions
- Why Care About Types?
- Haskells Type System
- Strong Types
- Static Types
- Type Inference
- What to Expect from the Type System
- Some Common Basic Types
- Function Application
- Useful Composite Data Types: Lists and Tuples
- Functions over Lists and Tuples
- Passing an Expression to a Function
- Function Types and Purity
- Haskell Source Files, and Writing Simple Functions
- Just What Is a Variable, Anyway?
- Conditional Evaluation
- Understanding Evaluation by Example
- Lazy Evaluation
- A More Involved Example
- Recursion
- Ending the Recursion
- Returning from the Recursion
- What Have We Learned?
- Polymorphism in Haskell
- Reasoning About Polymorphic Functions
- Further Reading
- The Type of a Function of More Than One Argument
- Why the Fuss over Purity?
- Conclusion
- 3. Defining Types, Streamlining Functions
- Defining a New Data Type
- Naming Types and Values
- Defining a New Data Type
- Type Synonyms
- Algebraic Data Types
- Tuples, Algebraic Data Types, and When to Use Each
- Analogues to Algebraic Data Types in Other Languages
- The structure
- The enumeration
- The discriminated union
- Pattern Matching
- Construction and Deconstruction
- Further Adventures
- Variable Naming in Patterns
- The Wild Card Pattern
- Exhaustive Patterns and Wild Cards
- Record Syntax
- Parameterized Types
- Recursive Types
- Reporting Errors
- A More Controlled Approach
- Introducing Local Variables
- Shadowing
- The where Clause
- Local Functions, Global Variables
- The Offside Rule and Whitespace in an Expression
- A Note About Tabs Versus Spaces
- The Offside Rule Is Not Mandatory
- The case Expression
- Common Beginner Mistakes with Patterns
- Incorrectly Matching Against a Variable
- Incorrectly Trying to Compare for Equality
- Conditional Evaluation with Guards
- 4. Functional Programming
- Thinking in Haskell
- A Simple Command-Line Framework
- Warming Up: Portably Splitting Lines of Text
- A Line-Ending Conversion Program
- Infix Functions
- Working with Lists
- Basic List Manipulation
- Safely and Sanely Working with Crashy Functions
- Partial and Total Functions
- More Simple List Manipulations
- Working with Sublists
- Searching Lists
- Working with Several Lists at Once
- Special String-Handling Functions
- How to Think About Loops
- Explicit Recursion
- Transforming Every Piece of Input
- Mapping over a List
- Selecting Pieces of Input
- Computing One Answer over a Collection
- The Left Fold
- Why Use Folds, Maps, and Filters?
- Folding from the Right
- Left Folds, Laziness, and Space Leaks
- Further Reading
- Anonymous (lambda) Functions
- Partial Function Application and Currying
- Sections
- As-patterns
- Code Reuse Through Composition
- Use Your Head Wisely
- Tips for Writing Readable Code
- Space Leaks and Strict Evaluation
- Avoiding Space Leaks with seq
- Learning to Use seq
- 5. Writing a Library: Working with JSON Data
- A Whirlwind Tour of JSON
- Representing JSON Data in Haskell
- The Anatomy of a Haskell Module
- Compiling Haskell Source
- Generating a Haskell Program and Importing Modules
- Printing JSON Data
- Type Inference Is a Double-Edged Sword
- A More General Look at Rendering
- Developing Haskell Code Without Going Nuts
- Pretty Printing a String
- Arrays and Objects, and the Module Header
- Writing a Module Header
- Fleshing Out the Pretty-Printing Library
- Compact Rendering
- True Pretty Printing
- Following the Pretty Printer
- Creating a Package
- Writing a Package Description
- GHCs Package Manager
- Setting Up, Building, and Installing
- Practical Pointers and Further Reading
- 6. Using Typeclasses
- The Need for Typeclasses
- What Are Typeclasses?
- Declaring Typeclass Instances
- Important Built-in Typeclasses
- Show
- Read
- Serialization with read and show
- Numeric Types
- Equality, Ordering, and Comparisons
- Automatic Derivation
- Typeclasses at Work: Making JSON Easier to Use
- More Helpful Errors
- Making an Instance with a Type Synonym
- Living in an Open World
- When Do Overlapping Instances Cause Problems?
- Relaxing Some Restrictions on Typeclasses
- How Does Show Work for Strings?
- How to Give a Type a New Identity
- Differences Between Data and Newtype Declarations
- Summary: The Three Ways of Naming Types
- JSON Typeclasses Without Overlapping Instances
- The Dreaded Monomorphism Restriction
- Conclusion
- 7. I/O
- Classic I/O in Haskell
- Pure Versus I/O
- Why Purity Matters
- Classic I/O in Haskell
- Working with Files and Handles
- More on openFile
- Closing Handles
- Seek and Tell
- Standard Input, Output, and Error
- Deleting and Renaming Files
- Temporary Files
- Extended Example: Functional I/O and Temporary Files
- Lazy I/O
- hGetContents
- readFile and writeFile
- A Word on Lazy Output
- interact
- Filters with interact
- The IO Monad
- Actions
- Sequencing
- The True Nature of Return
- Is Haskell Really Imperative?
- Side Effects with Lazy I/O
- Buffering
- Buffering Modes
- Flushing The Buffer
- Reading Command-Line Arguments
- Environment Variables
- 8. Efficient File Processing, Regular Expressions, and Filename Matching
- Efficient File Processing
- Binary I/O and Qualified Imports
- Text I/O
- Efficient File Processing
- Filename Matching
- Regular Expressions in Haskell
- The Many Types of Result
- More About Regular Expressions
- Mixing and Matching String Types
- Other Things You Should Know
- Translating a glob Pattern into a Regular Expression
- An important Aside: Writing Lazy Functions
- Making Use of Our Pattern Matcher
- Handling Errors Through API Design
- Putting Our Code to Work
- 9. I/O Case Study: A Library for Searching the Filesystem
- The find Command
- Starting Simple: Recursively Listing a Directory
- Revisiting Anonymous and Named Functions
- Why Provide Both mapM and forM?
- A Naive Finding Function
- Predicates: From Poverty to Riches, While Remaining Pure
- Sizing a File Safely
- The Acquire-Use-Release Cycle
- A Domain-Specific Language for Predicates
- Avoiding Boilerplate with Lifting
- Gluing Predicates Together
- Defining and Using New Operators
- Controlling Traversal
- Density, Readability, and the Learning Process
- Another Way of Looking at Traversal
- Useful Coding Guidelines
- Common Layout Styles
- 10. Code Case Study: Parsing a Binary Data Format
- Grayscale Files
- Parsing a Raw PGM File
- Getting Rid of Boilerplate Code
- Implicit State
- The Identity Parser
- Record Syntax, Updates, and Pattern Matching
- A More Interesting Parser
- Obtaining and Modifying the Parse State
- Reporting Parse Errors
- Chaining Parsers Together
- Introducing Functors
- Constraints on Type Definitions Are Bad
- Infix Use of fmap
- Flexible Instances
- Thinking More About Functors
- Writing a Functor Instance for Parse
- Using Functors for Parsing
- Rewriting Our PGM Parser
- Future Directions
- 11. Testing and Quality Assurance
- QuickCheck: Type-Based Testing
- Testing for Properties
- Testing Against a Model
- QuickCheck: Type-Based Testing
- Testing Case Study: Specifying a Pretty Printer
- Generating Test Data
- Testing Document Construction
- Using Lists as a Model
- Putting It All Together
- Measuring Test Coverage with HPC
- 12. Barcode Recognition
- A Little Bit About Barcodes
- EAN-13 Encoding
- A Little Bit About Barcodes
- Introducing Arrays
- Arrays and Laziness
- Folding over Arrays
- Modifying Array Elements
- Encoding an EAN-13 Barcode
- Constraints on Our Decoder
- Divide and Conquer
- Turning a Color Image into Something Tractable
- Parsing a Color Image
- Grayscale Conversion
- Grayscale to Binary and Type Safety
- What Have We Done to Our Image?
- Finding Matching Digits
- Run Length Encoding
- Scaling Run Lengths, and Finding Approximate Matches
- List Comprehensions
- Remembering a Matchs Parity
- Another kind of laziness, of the keyboarding variety
- Chunking a List
- Generating a List of Candidate Digits
- Life Without Arrays or Hash Tables
- A Forest of Solutions
- A Brief Introduction to Maps
- Type constraints
- Partial application awkwardness
- Getting started with the API
- Further Reading
- Turning Digit Soup into an Answer
- Solving for Check Digits in Parallel
- Completing the Solution Map with the First Digit
- Finding the Correct Sequence
- Working with Row Data
- Pulling It All Together
- A Few Comments on Development Style
- 13. Data Structures
- Association Lists
- Maps
- Functions Are Data, Too
- Extended Example: /etc/passwd
- Extended Example: Numeric Types
- First Steps
- Completed Code
- Taking Advantage of Functions as Data
- Turning Difference Lists into a Proper Library
- Lists, Difference Lists, and Monoids
- General-Purpose Sequences
- 14. Monads
- Revisiting Earlier Code Examples
- Maybe Chaining
- Implicit State
- Revisiting Earlier Code Examples
- Looking for Shared Patterns
- The Monad Typeclass
- And Now, a Jargon Moment
- Using a New Monad: Show Your Work!
- Information Hiding
- Controlled Escape
- Leaving a Trace
- Using the Logger Monad
- Mixing Pure and Monadic Code
- Putting a Few Misconceptions to Rest
- Building the Logger Monad
- Sequential Logging, Not Sequential Evaluation
- The Writer Monad
- The Maybe Monad
- Executing the Maybe Monad
- Maybe at Work, and Good API Design
- The List Monad
- Understanding the List Monad
- Putting the List Monad to Work
- Desugaring of do Blocks
- Monads as a Programmable Semicolon
- Why Go Sugar-Free?
- The State Monad
- Almost a State Monad
- Reading and Modifying the State
- Will the Real State Monad Please Stand Up?
- Using the State Monad: Generating Random Values
- A First Attempt at Purity
- Random Values in the State Monad
- Running the State Monad
- What About a Bit More State?
- Monads and Functors
- Another Way of Looking at Monads
- The Monad Laws and Good Coding Style
- 15. Programming with Monads
- Golfing Practice: Association Lists
- Generalized Lifting
- Looking for Alternatives
- The Name mplus Does Not Imply Addition
- Rules for Working with MonadPlus
- Failing Safely with MonadPlus
- Adventures in Hiding the Plumbing
- Supplying Random Numbers
- Another Round of Golf
- Separating Interface from Implementation
- Multiparameter Typeclasses
- Functional Dependencies
- Rounding Out Our Module
- Programming to a Monads Interface
- The Reader Monad
- A Return to Automated Deriving
- Hiding the IO Monad
- Using a newtype
- Designing for Unexpected Uses
- Using Typeclasses
- Isolation and Testing
- The Writer Monad and Lists
- Arbitrary I/O Revisited
- 16. Using Parsec
- First Steps with Parsec: Simple CSV Parsing
- The sepBy and endBy Combinators
- Choices and Errors
- Lookahead
- Error Handling
- Extended Example: Full CSV Parser
- Parsec and MonadPlus
- Parsing a URL-Encoded Query String
- Supplanting Regular Expressions for Casual Parsing
- Parsing Without Variables
- Applicative Functors for Parsing
- Applicative Parsing by Example
- Parsing JSON Data
- Parsing a HTTP Request
- Backtracking and Its Discontents
- Parsing Headers
- 17. Interfacing with C: The FFI
- Foreign Language Bindings: The Basics
- Be Careful of Side Effects
- A High-Level Wrapper
- Foreign Language Bindings: The Basics
- Regular Expressions for Haskell: A Binding for PCRE
- Simple Tasks: Using the C Preprocessor
- Binding Haskell to C with hsc2hs
- Adding Type Safety to PCRE
- Binding to Constants
- Automating the Binding
- Passing String Data Between Haskell and C
- Typed Pointers
- Memory Management: Let the Garbage Collector Do the Work
- A High-Level Interface: Marshaling Data
- Marshaling ByteStrings
- Allocating Local C Data: The Storable Class
- Putting It All Together
- Matching on Strings
- Extracting Information About the Pattern
- Pattern Matching with Substrings
- The Real Deal: Compiling and Matching Regular Expressions
- 18. Monad Transformers
- Motivation: Boilerplate Avoidance
- A Simple Monad Transformer Example
- Common Patterns in Monads and Monad Transformers
- Stacking Multiple Monad Transformers
- Hiding Our Work
- Moving Down the Stack
- When Explicit Lifting Is Necessary
- Understanding Monad Transformers by Building One
- Creating a Monad Transformer
- More Typeclass Instances
- Replacing the Parse Type with a Monad Stack
- Transformer Stacking Order Is Important
- Putting Monads and Monad Transformers into Perspective
- Interference with Pure Code
- Overdetermined Ordering
- Runtime Overhead
- Unwieldy Interfaces
- Pulling It All Together
- 19. Error Handling
- Error Handling with Data Types
- Use of Maybe
- Loss and preservation of laziness
- Usage of the Maybe monad
- Use of Maybe
- Use of Either
- Custom data types for errors
- Monadic use of Either
- Error Handling with Data Types
- Exceptions
- First Steps with Exceptions
- Laziness and Exception Handling
- Using handle
- Selective Handling of Exceptions
- I/O Exceptions
- Throwing Exceptions
- Dynamic Exceptions
- Error Handling in Monads
- A Tiny Parsing Framework
- 20. Systems Programming in Haskell
- Running External Programs
- Directory and File Information
- Program Termination
- Dates and Times
- ClockTime and CalendarTime
- Using ClockTime
- Using CalendarTime
- TimeDiff for ClockTime
- ClockTime and CalendarTime
- File Modification Times
- Extended Example: Piping
- Using Pipes for Redirection
- Better Piping
- Final Words on Pipes
- 21. Using Databases
- Overview of HDBC
- Installing HDBC and Drivers
- Connecting to Databases
- Transactions
- Simple Queries
- SqlValue
- Query Parameters
- Prepared Statements
- Reading Results
- Reading with Statements
- Lazy Reading
- Database Metadata
- Error Handling
- 22. Extended Example: Web Client Programming
- Basic Types
- The Database
- The Parser
- Downloading
- Main Program
- 23. GUI Programming with gtk2hs
- Installing gtk2hs
- Overview of the GTK+ Stack
- User Interface Design with Glade
- Glade Concepts
- Event-Driven Programming
- Initializing the GUI
- The Add Podcast Window
- Long-Running Tasks
- Using Cabal
- 24. Concurrent and Multicore Programming
- Defining Concurrency and Parallelism
- Concurrent Programming with Threads
- Threads Are Nondeterministic
- Hiding Latency
- Simple Communication Between Threads
- The Main Thread and Waiting for Other Threads
- Safely Modifying an MVar
- Safe Resource Management: A Good Idea, and Easy Besides
- Finding the Status of a Thread
- Writing Tighter Code
- Communicating over Channels
- Useful Things to Know About
- MVar and Chan Are Nonstrict
- Chan Is Unbounded
- Shared-State Concurrency Is Still Hard
- Deadlock
- Starvation
- Is There Any Hope?
- Using Multiple Cores with GHC
- Runtime Options
- Finding the Number of Available Cores from Haskell
- Choosing the Right Runtime
- Parallel Programming in Haskell
- Normal Form and Head Normal Form
- Sequential Sorting
- Transforming Our Code into Parallel Code
- Knowing What to Evaluate in Parallel
- What Promises Does par Make?
- Running Our Code and Measuring Performance
- Tuning for Performance
- Parallel Strategies and MapReduce
- Separating Algorithm from Evaluation
- Separating Algorithm from Strategy
- Writing a Simple MapReduce Definition
- MapReduce and Strategies
- Sizing Work Appropriately
- Mitigating the risks of lazy I/O
- Efficiently Finding Line-Aligned Chunks
- Counting Lines
- Finding the Most Popular URLs
- Conclusions
- 25. Profiling and Optimization
- Profiling Haskell Programs
- Collecting Runtime Statistics
- Time Profiling
- Space Profiling
- Profiling Haskell Programs
- Controlling Evaluation
- Strictness and Tail Recursion
- Adding Strictness
- Normal form reduction
- Bang patterns
- Strict data types
- Understanding Core
- Advanced Techniques: Fusion
- Tuning the Generated Assembly
- Conclusions
- 26. Advanced Library Design: Building a Bloom Filter
- Introducing the Bloom Filter
- Use Cases and Package Layout
- Basic Design
- Unboxing, Lifting, and Bottom
- The ST Monad
- Designing an API for Qualified Import
- Creating a Mutable Bloom Filter
- The Immutable API
- Creating a Friendly Interface
- Re-Exporting Names for Convenience
- Hashing Values
- Turning Two Hashes into Many
- Implementing the Easy Creation Function
- Creating a Cabal Package
- Dealing with Different Build Setups
- Compilation Options and Interfacing to C
- Testing with QuickCheck
- Polymorphic Testing
- Writing Arbitrary Instances for ByteStrings
- Are Suggested Sizes Correct?
- Performance Analysis and Tuning
- Profile-Driven Performance Tuning
- 27. Sockets and Syslog
- Basic Networking
- Communicating with UDP
- UDP Client Example: syslog
- UDP Syslog Server
- Communicating with TCP
- Handling Multiple TCP Streams
- TCP Syslog Server
- TCP Syslog Client
- 28. Software Transactional Memory
- The Basics
- Some Simple Examples
- STM and Safety
- Retrying a Transaction
- What Happens When We Retry?
- Choosing Between Alternatives
- Using Higher Order Code with Transactions
- I/O and STM
- Communication Between Threads
- A Concurrent Web Link Checker
- Checking a Link
- Worker Threads
- Finding Links
- Command-Line Parsing
- Pattern Guards
- Practical Aspects of STM
- Getting Comfortable with Giving Up Control
- Using Invariants
- A. Installing GHC and Haskell Libraries
- Installing GHC
- Windows
- Mac OS X
- Alternatives
- Ubuntu and Debian Linux
- Fedora Linux
- FreeBSD
- Installing GHC
- Installing Haskell Software
- Automated Download and Installation with cabal
- Installing cabal
- Updating cabals package list
- Installing a library or program
- Automated Download and Installation with cabal
- Building Packages by Hand
- B. Characters, Strings, and Escaping Rules
- Writing Character and String Literals
- International Language Support
- Escaping Text
- Single-Character Escape Codes
- Multiline String Literals
- ASCII Control Codes
- Control-with-Character Escapes
- Numeric Escapes
- The Zero-Width Escape Sequence
- Index
- About the Authors
- Colophon
- Copyright
O'Reilly Media - inne książki
-
Keeping up with the Python ecosystem can be daunting. Its developer tooling doesn't provide the out-of-the-box experience native to languages like Rust and Go. When it comes to long-term project maintenance or collaborating with others, every Python project faces the same problem: how to build re...(203.15 zł najniższa cena z 30 dni)
203.29 zł
239.00 zł(-15%) -
Bringing a deep-learning project into production at scale is quite challenging. To successfully scale your project, a foundational understanding of full stack deep learning, including the knowledge that lies at the intersection of hardware, software, data, and algorithms, is required.This book il...(237.15 zł najniższa cena z 30 dni)
244.53 zł
279.00 zł(-12%) -
Frontend developers have to consider many things: browser compatibility, usability, performance, scalability, SEO, and other best practices. But the most fundamental aspect of creating websites is one that often falls short: accessibility. Accessibility is the cornerstone of any website, and if a...(202.60 zł najniższa cena z 30 dni)
202.55 zł
239.00 zł(-15%) -
In this insightful and comprehensive guide, Addy Osmani shares more than a decade of experience working on the Chrome team at Google, uncovering secrets to engineering effectiveness, efficiency, and team success. Engineers and engineering leaders looking to scale their effectiveness and drive tra...(116.53 zł najniższa cena z 30 dni)
116.48 zł
149.00 zł(-22%) -
Data modeling is the single most overlooked feature in Power BI Desktop, yet it's what sets Power BI apart from other tools on the market. This practical book serves as your fast-forward button for data modeling with Power BI, Analysis Services tabular, and SQL databases. It serves as a starting ...(202.78 zł najniższa cena z 30 dni)
202.28 zł
239.00 zł(-15%) -
C# is undeniably one of the most versatile programming languages available to engineers today. With this comprehensive guide, you'll learn just how powerful the combination of C# and .NET can be. Author Ian Griffiths guides you through C# 12.0 and .NET 8 fundamentals and techniques for building c...(245.09 zł najniższa cena z 30 dni)
244.59 zł
279.00 zł(-12%) -
Learn how to get started with Futures Thinking. With this practical guide, Phil Balagtas, founder of the Design Futures Initiative and the global Speculative Futures network, shows you how designers and futurists have made futures work at companies such as Atari, IBM, Apple, Disney, Autodesk, Luf...(150.10 zł najniższa cena z 30 dni)
150.00 zł
179.00 zł(-16%) -
Augmented Analytics isn't just another book on data and analytics; it's a holistic resource for reimagining the way your entire organization interacts with information to become insight-driven.Moving beyond traditional, limited ways of making sense of data, Augmented Analytics provides a dynamic,...(178.05 zł najniższa cena z 30 dni)
177.85 zł
209.00 zł(-15%) -
Learn how to prepare for—and pass—the Kubernetes and Cloud Native Associate (KCNA) certification exam. This practical guide serves as both a study guide and point of entry for practitioners looking to explore and adopt cloud native technologies. Adrián González Sánchez ...
Kubernetes and Cloud Native Associate (KCNA) Study Guide Kubernetes and Cloud Native Associate (KCNA) Study Guide
(169.14 zł najniższa cena z 30 dni)177.65 zł
199.00 zł(-11%) -
Python is an excellent way to get started in programming, and this clear, concise guide walks you through Python a step at a time—beginning with basic programming concepts before moving on to functions, data structures, and object-oriented design. This revised third edition reflects the gro...(143.54 zł najniższa cena z 30 dni)
143.04 zł
179.00 zł(-20%)
Dzieki opcji "Druk na żądanie" do sprzedaży wracają tytuły Grupy Helion, które cieszyły sie dużym zainteresowaniem, a których nakład został wyprzedany.
Dla naszych Czytelników wydrukowaliśmy dodatkową pulę egzemplarzy w technice druku cyfrowego.
Co powinieneś wiedzieć o usłudze "Druk na żądanie":
- usługa obejmuje tylko widoczną poniżej listę tytułów, którą na bieżąco aktualizujemy;
- cena książki może być wyższa od początkowej ceny detalicznej, co jest spowodowane kosztami druku cyfrowego (wyższymi niż koszty tradycyjnego druku offsetowego). Obowiązująca cena jest zawsze podawana na stronie WWW książki;
- zawartość książki wraz z dodatkami (płyta CD, DVD) odpowiada jej pierwotnemu wydaniu i jest w pełni komplementarna;
- usługa nie obejmuje książek w kolorze.
Masz pytanie o konkretny tytuł? Napisz do nas: sklep[at]helion.pl.
Książka, którą chcesz zamówić pochodzi z końcówki nakładu. Oznacza to, że mogą się pojawić drobne defekty (otarcia, rysy, zagięcia).
Co powinieneś wiedzieć o usłudze "Końcówka nakładu":
- usługa obejmuje tylko książki oznaczone tagiem "Końcówka nakładu";
- wady o których mowa powyżej nie podlegają reklamacji;
Masz pytanie o konkretny tytuł? Napisz do nas: sklep[at]helion.pl.
Książka drukowana
![Loader](https://static01.helion.com.pl/ebookpoint/img/ajax-loader.gif)
![ajax-loader](https://static01.helion.com.pl/ebookpoint/img/ajax-loader.gif)
Oceny i opinie klientów: Real World Haskell. Code You Can Believe In Bryan O'Sullivan, John Goerzen, Donald Bruce Stewart (2)
Weryfikacja opinii następuję na podstawie historii zamówień na koncie Użytkownika umieszczającego opinię. Użytkownik mógł otrzymać punkty za opublikowanie opinii uprawniające do uzyskania rabatu w ramach Programu Punktowego.
(2)
(0)
(0)
(0)
(0)
(0)
więcej opinii