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.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to