Blog articles
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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.
Introductions to Haskell
- Haskell Study Plan
- On Haskell, Intuition And Expressive Power
- Haskell: Raising the bar
- Learning the Haskell programming language
- On learning Haskell
- My evolution as a Haskell programmer
- Why its hard for imperative programmers to learn Haskell
- Flirting with Functional Programming
- Building a Firewall Against Complexity
- Haskell, bondage-and-discipline and separation-of-concerns programming
- Type systems as safety belts
- Haskell introduction for beginners
- Haskell Basics
- Haskell Preliminaries: Implementations and Tools
- Simple Functions in Haskell
- A Haskell study plan
- Haskell Eye for the Ruby Guy
First impressions
- Haskell First Impressions
- One month in Haskell
- Thoughts on one week in Haskell
- The beauty of Haskell
- Monad wrangling, and the joy of #haskell
- Learning Haskell
- I like Haskell a lot
Comparisons to other languages
Ruby
- Ruby vs Haskell: choose what works
- Haskell: open secret in Ruby land
- Haskell Eye for the Ruby Guy
- Monads in Ruby
- RushCheck, a lightweight random testing tool for Ruby similar to QuickCheck
- part 1
- zip and transpose
- Pattern matching in Ruby
Erlang
Ada
Java
- More Haskell in Java 7 or 8?
- Type classes in Java
- Closures and bottom for Java
- An infinite list in Java
- Maybe monad in Java
Perl 6
Eiffel
Javascript
C
C#
- The New Lambda Expressions Feature in C# 3.0
- Immutability, Purity, and Referential Transparency in C#
- Haskell for C# 3 Programmers
Scala
CAL
Python
- Haskell versus Python
- Using Haskell in Python: haskellembed
- Understanding Monads Via Python List Comprehensions
Scheme
Forth
Factor
Lisp
Lua
Qi
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
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
Games
Laziness
Records
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
Command line arguments
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
Network
HTTP
TCP
- Simple STM TCP server
- Haskell's 'interact' with TCP sockets
- Port Scanner in Haskell
- Simple socket programming:
- On haskell: writing a packet sniffer
IRC
Parallelism and Concurrency
- Threads
- STM and IO
- Synchronised threads:
- More Haskell parallelism
Performance
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
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
- 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
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
Arrows
Comonads
- Comonads and reading from the future
- Evaluating cellular automata is co-monadic
- Understanding comonads
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
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
Type classes
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
Strings
Algorithms and techniques
Folds
Dynamic programming
Mutable data
Sections and Currying
GUIs
Graphics
Web and XML
- Haskell and Web Applications
- Ruby and Haskell: write your Rails backend code in Haskell instead of C
- Writing a Simple Search Engine in Haskell
- Haskell and the web: some ideas in progress
- A search engine (core) written in Haskell
- Haskell Transactional Cache
HTML
XML, Atom, RSS
- Really simple Atom syndication
- A simple RSS aggregator in 50 lines of Haskell using HXT
- Using the Haskell XML Toolbox
Maths
Haskell for mathematics
- Learn Maths with Haskell
- Practical Synthetic Differential Geometry
- More Low Cost Geometric Algebra
- Algebraic Topology in Haskell
- Infinitesimal Types
- Geometric Algebra for Free!
- Eleven Reasons to use Haskell as a Mathematician
- Laws of Form: An Opinion
- A-algebras and group cohomology
- Prototyping thought
- Computational Group Theory in Haskell
- Carry bits and group cohomology
- Polynomials as numbers
- Non-standard analysis, automatic differentiation, Haskell
- Haskell for Maths: commutative algebra, combinatorics, number theory, and group theory
- Two-dimensional spatial hashing with space-filling curves
- Arithmetic coding in Haskell
- Countable Ordinals in Haskell
- Polynomials as numbers
- The Division Bell
- Haskell, PDF and penrose tilings
- Overloading Haskell numbers
Theorem proving
Quantum computing
- The Essence of Quantum Computing
- Monads for vector spaces, probability and quantum mechanics pt. I
- Monads, Vector Spaces and Quantum Mechanics pt. II
- Independence, entanglement and decoherence with the quantum monad
- The Shor Quantum Error Correcting Code (and a Monad for Heat)
- The Frame Of Reference Monad
Mathematics of Haskell
- Why isn't ListT list a monad?
- Reverse Engineering Machines with the Yoneda Lemma
- Variable substitution gives a...
- From Lb's Theorem to Spreadsheet Evaluation
- Games, Strategies and the Self-Composition of the List Monad.
- Programs are Proofs: Models and Types in Lambda Calculus
- Why Haskell?
- Don't need the Y combinator
Testing
- Introduction to QuickCheck
- QuickChecking a window manager
- On Unit Testing and Type Safety
- Robustness and QuickCheck
Regular expressions
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
Tips and tricks
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