[Haskell-cafe] do we have something like isDefined or isNull in Haskell?

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Thu Jun 15 08:11:40 EDT 2006


On Thu, 2006-06-15 at 12:43 +0100, Vladimir Portnykh wrote:
> Suppose there is a data definition in Haskell:
> data MyType = MyType { date	:: Double,
> 		   weight 	:: Double,
> 		  height	:: Double
> 		} deriving (Eq, Ord, Show)
> 
> Is it possible to check if the field height, for example, is filled 
> in(defined)? Can we give default values in Haskell?

There is no implicit null, standard technique is to use an explicit null
using the Maybe type:

data MyType = MyType {
  date	 :: Maybe Double,
  weight :: Maybe Double,
  height :: Maybe Double
} deriving (Eq, Ord, Show)

The Maybe type is defined like this:

data Maybe a = Nothing | Just a

so a value of type 'Maybe a' can be either Just x or Nothing.

So you can represent your lack of a value using Nothing. You can get
something similar to default values in a record by using the ordinary
record update syntax. Suppose we start with a default record value:

default :: MyType
default = MyType { date = Nothing, weight = Nothing, height = Nothing }

then you can construct your records using:

foo = default { weight = 3.2 }

so foo will get all the default values except for the ones you
explicitly set.

Duncan



More information about the Haskell-Cafe mailing list