When will it be an update of Real World Haskell ?


It's old. RWH was written at a time version 6.8 of GHC was being used. 6.8 used base version 3.0.x.x. 6.10.1 already used, which introduced many changes. And that's just the jump from 6.8 to 6.10. The current version of GHC is 7.8, and the upcoming 7.10 will change monads significantly (see below).

That being said, it's still a useful resource for general guidelines. But keep in mind that some libraries changed since its release.

General remarks
Read the comments. They usually contain information whether the given paragraph/section is still relevant and/or working.
Read the documentation of the libraries/functions you want to use. Even if you're lazy, know at least the types.
Remarks to chapters
This is just a quick overview of some of the things that I noticed while reading RWH. It's probably incomplete.

Chapter 14. Monads & Chapter 15. Programming with monads

Code breaking: Applicative m => Monad m

Soon, Applicative will become a superclass of Monad, something that wasn't planned in 2007.

In GHC 7.10, Applicative will become a superclass of Monad, potentially breaking a lot of user code. To ease this transition, GHC now generates warnings when definitions conflict with the Applicative-Monad Proposal (AMP).

See 7.8.1 release notes.

The State/Writer/Reader monads

In the Will the real state monad please stand up? section, the authors claim

In order to define a Monad instance, we have to provide a proper type constructor as well as definitions for (>>=) and return. This leads us to the real definition of State.

-- file: ch14/State.hs
newtype State s a = State
runState :: s -> (a, s)
That's not true any longer, since State and its friends are now implemented via

type State s = StateT s Identity
type Writer w = WriterT w Identity
type Reader r = ReaderT r Identity
So they're defined by their monad transformer.

Chapter 19. Error handling

Error handling changed completely from 6.8 to 6.10, but you noticed that already. Better read the documentation.

Chapter 22. Extended Example: Web Client Programming

Some of the example seem to be broken. Also, there are other HTTP libraries available.

Chapter 25. Profiling and optimization

General profiling techniques are still the same, and the example (see below) is a great case study for problems that can occur in your program. But RWH is missing multi-threaded profiling, e.g. via ThreadScope. Also, lazy IO isn't concerned throughout the whole book, as far as I know.

mean :: [Double] -> Double
mean xs = sum xs / fromIntegral (length xs)
Chapter 24 & Chapter 28 (Concurrent and parallel programming & STM)

While Chapter 24. Concurrent and multicore programming and Chapter 28. Software transactional memory are still relevant, Simon Marlow's book Parallel and Concurrent Programming in Haskell focuses solely on concurrent and parallel programming and is pretty recent (2013). GPU programming and repa are completely missing in RWH.

Chapter 26. Advanced library design: building a Bloom filter

As with the other chapters, the general guidelines of the design library is still well written and relevant. However, due to some changes (?) concerning ST, the result cannot be compiled anymore.

Chapter 27. Network programming

It's still mostly up to date. After all, network programming doesn't change so easily. However, the code uses deprecated functions bindSocket and sClose, which should be replaced by bind and close (preferably via qualified import). Keep in mind that it's very low-level, you might want to use a more specialized high-level library.

Missing content
Some topics are not discussed in RWH at all. This includes streaming libraries such as pipes and conduit, and also lenses.

There are several resources out there for those topics, but here are some links to introductions to give you an idea what they're about. Also, if you want to use vectors, use the vectors package.


Video by Edward Kmett (author of lens)
Introduction and tutorial by Jakub Arnold
Streaming libraries

Conduit Overview by Michael Snoyman (author of conduit)
Pipes tutorial by Gabriel Gonzales (author of pipes, included in the pipes package)
1 person has
this question