# Blog articles

### From HaskellWiki

(Difference between revisions)

DonStewart (Talk | contribs) (→Introductions to Haskell) |
DonStewart (Talk | contribs) (→Network) |
||

Line 104: | Line 104: | ||

=== Network === |
=== Network === |
||

− | ==== HTTP ==== |
+ | * [[/Network|Articles on networking with Haskell]] |

− | |||

− | * [http://nominolo.blogspot.com/2007/05/networkhttp-bytestrings.html Network.HTTP + ByteStrings] |
||

− | * [http://www.alpheccar.org/en/posts/show/73 Haskell: Preventing irreversible updates from HTTP GET with types] |
||

− | |||

− | ==== TCP ==== |
||

− | |||

− | * [http://sequence.complete.org/node/258 Simple STM TCP server] |
||

− | * [http://stephan.walter.name/blog/computers/programming/haskell/interacttcp.html Haskell's 'interact' with TCP sockets] |
||

− | * [http://greek-lord.gr/WordPress/?p=10 Port Scanner in Haskell] |
||

− | * Simple socket programming: |
||

− | ** [http://metavar.blogspot.com/2007/03/simple-socket-programming.html Part 1] |
||

− | ** [http://metavar.blogspot.com/2007/03/simple-socket-programming-2-revenge-of.html Part 2] |
||

− | * [http://austin.youareinferior.net/?q=node/24 On haskell: writing a packet sniffer] |
||

− | * [http://abstractabsurd.blogspot.com/2007/05/couple-of-silly-examples.html A simple echo server] |
||

− | |||

− | ==== IRC ==== |
||

− | |||

− | * [http://blog.nurd.se/hype/?p=30 An IRC client/server in Haskell] |
||

− | * [http://haskell.org/haskellwiki/Roll_your_own_IRC_bot Roll your own Haskell IRC bot] |
||

=== Parallelism and Concurrency === |
=== Parallelism and Concurrency === |

## Revision as of 04:38, 28 June 2007

Many areas of Haskell have been explored in the form of blog posts. This page collects the best of those articles from across the web.

### 1 Introductions to Haskell

### 2 Comparisons to other languages

### 3 Functional programming

- A fold-like procedure in C
- What's wrong with for loops
- More on what's wrong with for loops
- Liberating Myself from the von Neumann Style
- Programming Productivity and Programming Languages
- Haskell - A valuable language
- On Functional Programming
- Functional programming is a silver bullet
- Silver Bullets Incoming!
- Computers were invented to keep track of boring things
- Functional programming for the rest of us
- Zen and the Art of Functional Programming
- Thinking in types

### 4 Programming exercises

- Diff in Haskell
- Introductory Haskell: Solving the Sorting-It-Out Kata
- A Simple RPN Calculator in Haskell
- Eratosthenes sieve
- Software Cipher
- Secret Santas in Haskell I: Preliminaries
- Secret Santas in Haskell II: Orbits and Lists
- Secret Santas in Haskell III: Lather, Rinse, Repeat 1
- The Dot-Matrix Printhead: a Haskell Toy
- The Revised Dot-Matrix Printhead
- Run length encoding:
- Overlap function in Haskell for rectangles
- Tying Knots Generically
- A quick and dirty theorem prover in Haskell
- Brainf*k interpreter in Haskell
- FourFours in Haskell
- Using Bayesian filtering instead of 'if' in Haskell
- Prime sieves in Haskell
- Bowling in Haskell
- Norvig's spell checker and idiomatic Haskell

#### 4.1 Games

### 5 Laziness

### 6 Records

### 7 IO

- Haskell I/O for imperative programmers
- Directory tree printing:
- Introductory console IO in Haskell
- Listing files in Haskell
- Playing unsafe Haskell
- separating IO from logic -- example
- Programming Haskell
- Design Patterns in Haskell: bracket
- 7 Rules for IO in Haskell
- File related hacking

#### 7.1 Command line arguments

#### 7.2 Unix

- Simple Unix Tools in Elegant Haskell
- HSH: a Haskell scripting environment
- Function composition and unix pipes
- Practical Haskell: shell scripting with error handling and privilege separation
- A simple file filter
- Signal handling

### 8 Network

### 9 Parallelism and Concurrency

- Threads Considered Harmful (discusses The Problem with Threads)
- STM and IO
- Synchronised threads:
- More Haskell parallelism

### 10 Performance

### 11 Parsing

- Parser combinators
- Monadic parsing
- Adventures in Haskell: the Parsec magic weapon
- Adventures in Haskell: parsing the game world
- Combinator parsing
- Parser with Writer monad
- Simple Parsec Example: HTMangL
- Parsers, Parsec and Haskell
- Interesting parsers in Haskell
- Explicit Typing, Trail Blazing, and Packrat Parsing
- Playing fast and loose with Parsec for parsing in Haskell
- Config file parsing
- Parsing JSON in Haskell
- Write yourself a Scheme in 48 hours
- A beginner with Parsec

### 12 Code generation

- Writing x86 code generators with Harpy:

### 13 Monads

- The monad laws
- The Trivial Monad
- Tracking tainted data: Homeland Security Threat Level Monad
- Monads: a field guide
- Variable substitution gives a ... monad
- The monad behind every zipper
- Monads for vector spaces, probability and quantum mechanics pt. I
- Monads, Vector Spaces and Quantum Mechanics pt. II
- How to write tolerably efficient optimzation code without really trying...
- Quick interpreters with the Reader monad
- Monads
- More on Haskell, Side Effects and Code Reuse
- A First Step Into Monads
- More Monads: Stateful Programming
- The theory of monads
- A newbie in Haskell land or another monad tutorial
- A newbie in Haskell land : The (->) monad
- Smart classification using Bayesian monads
- 3 open problems with monads
- Monads in 15 minutes: Backtracking and Maybe
- How to make Data.Set a monad
- Monads work because they have a tight interface
- Haskell: bootstrapping into a clue about monads
- Why monads matter
- Monads through Pictures
- Monads as universe helpers
- Simple state monad
- repeat and sequence
- What's a monad?

#### 13.1 Monad transformers

- A twisted history of monad transformers
- How To Use Monad Transformers
- Local and global side effects with monad transformers
- Grok monad transformers
- A Simple Game with StateT

#### 13.2 Arrows

#### 13.3 Comonads

- Comonads and reading from the future
- Evaluating cellular automata is co-monadic
- Understanding comonads

### 14 Error handling and exceptions

- Error handling in Haskell
- Some Very Basic Haskell and Thoughts on Error Diagnosis
- 8 ways to report errors in Haskell
- Towards Better Error Handling

### 15 Types

- A type-based solution to the 'strings problem'
- Generalised Algebraic Data Types, Phantom Types, and Dependent Types
- Functions, Types, Function Types, and Type Inference
- Building Datatypes in Haskell (part 1)
- Rank-2 polymorphism is a strange thing
- Scientific.Dimension: Type Arithmetic and Physical Units in Haskell

#### 15.1 Type classes

### 16 Data structures

- Queues without pointers
- A Tree Grows Up in Haskell: Building a Dictionary Type
- Haskell Stacks : Two Different Ways
- A counter datatype with constant-time update
- Map fusion: Making Haskell 225% faster
- Roll Your Own Window Manager: Tracking Focus with a Zipper

#### 16.1 Strings

### 17 Algorithms and techniques

#### 17.1 Folds

#### 17.2 Dynamic programming

#### 17.3 Mutable data

#### 17.4 Sections and Currying

### 18 GUIs

### 19 Databases

### 20 Graphics

### 21 Web and XML

### 22 Maths

### 23 Testing, correctness and proofs

- Introduction to QuickCheck
- QuickChecking a window manager
- On Unit Testing and Type Safety
- Robustness and QuickCheck
- Does XMonad crash? On proving pattern coverage with Catch
- Preconditions on XMonad

### 24 Regular expressions

### 25 The foreign function interface

- Simple demonstration of Haskell FFI
- C and Haskell sitting in a tree
- Haskell and C: functions returning more than one value

### 26 Tips and tricks

### 27 Cabal and libraries

- Cabal and rpms
- Getting started with installing third-party Haskell packages
- The lambda revolution: how you can help
- The lambda revolution, Episode V, the deb strikes back
- Questions on Haskell Style (and Polynomials redux)
- Using the Haskell package system
- How To Install Haskell Haddock on Mac OS X