[Haskell-cafe] Record initialise question
Martijn van Steenbergen
martijn at van.steenbergen.nl
Fri Jun 5 06:05:38 EDT 2009
Hi John,
John Ky wrote:
> > full = do
> > let myOrder = init -- [1]
> > { item = Just init
> > { itemId = "Something"
> > }
> > , operation = Just Buy
> > }
> > putStrLn $ show myOrder
> > return ()
>
> Where initOrder and initItem are both replaced with just 'init' and the
> compiler works out from the context (ie. the type of the field) what the
> types are supposed to be and therefore the actual init function to call?
Sure! This is one of the simplest forms of overloading. Here's a small
example:
> data Circle = Circle { center :: (Float, Float), radius :: Float }
> data WrapCircle = WrapCircle { circle :: Circle }
>
> class Ini a where
> ini :: a
>
> instance Ini Circle where
> ini = Circle { center = (0, 0), radius = 1 }
>
> exampleCircle :: WrapCircle
> exampleCircle = WrapCircle { circle = ini { radius = 2 } }
Hope this helps!
Martijn.
More information about the Haskell-Cafe
mailing list