[Haskell-beginners] Default values for Data Types?

Brent Yorgey byorgey at seas.upenn.edu
Mon Sep 22 15:43:34 EDT 2008


On Mon, Sep 22, 2008 at 02:38:32PM -0500, Mike Sullivan wrote:
> Hi all,
> 
> I was wondering if there is syntactic sugar in Haskell for defining a
> default value for fields in a data type. For instance, say I have a type
> that is defined in record syntax:
> 
> type CustomerID = Int
> type Address = Maybe String
> 
> data Customer = Customer {
> customerID :: CustomerID
> , customerName :: String
> , customerAddress :: Address
> } deriving (Show)
> 
> Is there any way to define default values for some (or all) fields
> such that they may be omitted from a declaration, and still have it
> generate a valid object?
> 
> e.g.)
> a = Customer{customerID = 12, customerName="Bill"}
> -- I would like a{customerAddress} to default to Nothing (for instance).
> 
> It seems to me that this would be a nice feature to have, if it does not
> exist. Am I missing something?

Hi Mike,

This feature doesn't exist, but it is easy to code it yourself by
creating a record with default values in it:

  defaultCust = Customer 0 "" Nothing

Then instead of saying a = Customer{...}, you can say

  a = defaultCust{customerID = 12, customerName="Bill"}

and the remaining field will default to Nothing, since that field of
defaultCust was not overridden.

-Brent


More information about the Beginners mailing list