maybe, i completely missunderstand you. please, could you program your example in another language than haskell, one you know better? i'm not sure -- did you try to define variables instead of types?
data Employee = Emp data Department = Dept translated to c++ this means sth like typedef void Employee; typedef void Department; did you want sth like ...? data Employee = Emp [(String,Either String Int)] emp1 :: Employee emp1=Emp [("Name",Left "Karl Ranseier"),("Identifier",Right 7),("Address",Left "Graveyard 13")] -marc Karl Grapone wrote: > Hi, > > I've just started learning Haskell, and I must admit I'm finding it a > bit hard to get my head around the typing system... > > If I wanted to represent Employees and Departments in a Haskell > program I could use data declarations like so: > data Employee = Emp ... > data Department = Dept ... > > This seems limited in (at least) two ways: > I can't dynamically add fields to an employee or department, and > once I pull a field out of an instance I lose type information. > > > What I want to be able to do is add and remove fields while the system > is running, I suppose via hs-plugins, and I should be prevented from, > for example, accidentally taking an employees first name and using it > as a departments address. > > My first attempt was the following, which isn't even valid and doesn't > appear to buy me much anyway. > > class DataContainer c > > class DataContainer c => DataField f c a where > extract :: f -> a > apply :: (a -> a -> a) -> f -> f -> f > > data DataContainer c => Field c a = Fld c a > instance DataField Field c a where > extract (Fld _ a) = a > apply f (Fld c a1) (Fld _ a2) = Fld c (f a1 a2) > > > data Employee = Emp > instance DataContainer Employee > > data Department = Dept > instance DataContainer Department > > type EmployeeName = Field Employee String > type EmployeeAddress = Field Employee String > type EmployeeIdentifier = Field Employee Integer > type DepartmentAddress = Field Department String > type DepartmentIdentifier = Field Department Integer > ... > > > The 'DataField instance Field' declaration gives kind errors regarding > how many type arguments Field is applied to. I don't claim to > understand kinds at this point. > Even if it did work, apply doesn't appear to force the arguments to be > of the same type, and the declared type synonyms aren't enough to > prevent me getting employee names and addresses confused. > > Is there a correct way to express what I'm trying to do? Or is it a > bad idea to start with? > > Thanks > Karl > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe