On Thu, Aug 03, 2006 at 12:51:01PM +0200, Klaus Ostermann wrote: > To: haskell-cafe@haskell.org > From: Klaus Ostermann <[EMAIL PROTECTED]> > Date: Thu, 3 Aug 2006 12:51:01 +0200 > Subject: [Haskell-cafe] Variants of a recursive data structure > > Hi all, > > I have a problem which is probably not a problem at all for Haskell experts, > but I am struggling with it nevertheless. > > I want to model the following situation. I have ASTs for a language in two > variatns: A "simple" form and a "labelled" form, e.g. > > data SimpleExp = Num Int | Add SimpleExp SimpleExp > > data LabelledExp = LNum Int String | LAdd LabelledExp LabelledExp String > > I wonder what would be the best way to model this situation without > repeating the structure of the AST.
if you don't need to enforce that an exp is either completely labelled or not at all, how about this?: data Exp = Num Int | Add Exp Exp | Label Exp String this allows you to attach labels wherever you want, at the cost of an extra case each time you take an expression apart, which can be done in a separate function: unlabel :: Exp -> Exp unlabel (Label e _) = unlabel e unlabel (Add e e') = Add (unlabel e) (unlabel e') > The icing on the cake would be if it would also be possible to have a > function > > unlabel :: LabeledExp -> Exp that function is almost identical to the one above. cheers, matthias _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe