[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