I'm working my way through Real World Haskell and am in Chapter 3. On page 56 there is a discussion called "Record Syntax" and it gives this data constructor:

data Customer = Customer {
      customerID      :: CustomerID
    , customerName    :: String
    , customerAddress :: Address
    } deriving (Show)

where CustomerID and Address were defined (and loaded) before. But when I try to put in data, I get these errors

*Main> :load BookStore.hs
[1 of 1] Compiling Main             ( BookStore.hs, interpreted )
Ok, modules loaded: Main.
*Main> customer1 = Customer 271828 "J.R. Hacker"
            ["255 Syntax Ct",
             "Milpitas, CA 95134",
             "USA"]

<interactive>:1:11: parse error on input `='
*Main> 
<interactive>:1:18: parse error (possibly incorrect indentation)
*Main> 
<interactive>:1:21: parse error on input `,'
*Main> 
<interactive>:1:6: parse error on input `]'
*Main> 

If I put the whole data add on one line, I still get

*Main> customer1 = Customer 271828 "J.R. Hacker" ["255 Syntax Ct", "Milpitas, CA 95134", "USA"]

<interactive>:1:11: parse error on input `='
*Main> 

I'm on Ubuntu 11.10, using Emacs23, haskell-mode, running 7.0.4. Any ideas what's going wrong? The book gives this alternate version:

data Customer = Customer Int String [String]
                deriving (Show)

customerID :: Customer -> Int
customerID (Customer id _ _) = id

customerName :: Customer -> String
customerName (Customer _ name _) = name

customerAddress :: Customer -> [String]
customerAddress (Customer _ _ address) = address

...but it produces the same errors.


Olwe