I think similar things have been asked before, but I couldn't find anything specific. I have a data type with attributes. These attributes have different types. Right now I'm using a lot of boilerplate like that:
> data Gender = Masc | Fem | Neutr > ... > data Attr = Gender Gender | Cat Cat | Graph Graph | ... > data Type = TypeCat | TypeGender | ... deriving Eq > > myTypeOf (Gender _) = TypeGender > myTypeOf (Cat _) = TypeCat > ... > myTypeOf _ = TypeError > > data Segment = Seg { attrs :: [Attr] } > > attr f seg = seg { attrs = f (attrs seg) } > > gattr :: Type -> [Attr] -> Maybe Attr > gattr theType [] = fail "attribute not found" > gattr theType (a:as) = if myTypeOf a == theType then return a else gattr theType as > > cat :: Cat -> Segment -> Segment > cat c = attr ((Cat c):) -- set value > > gcat :: Segment -> Maybe Cat -- get value > gcat = deCat . gattr TypeCat . attrs > where deCat (Just (Cat c)) = c > deCat x = x > ... Does anyone have some suggestions for making this more concise? Generic Haskell? Tricky type classes? Thanks, Markus -- Markus Schnell Infineon Technologies AG, CPR ET Tel +49 (89) 234-20875 _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell