[Haskell-cafe] Data.Generics question

Vyacheslav Akhmechet coffeemug at gmail.com
Tue Dec 19 09:13:07 EST 2006


Sorry, I sent the email to the wrong place and messed up the code
(it's early :)). Take two:

transform = everywhere (mkT transform')
    where transform = (\Term a->Flattened a)
                           `extT` (Contstant a->Flattened a)


On 12/19/06, Vyacheslav Akhmechet <coffeemug at gmail.com> wrote:
> That should be pretty simple. This code probably won't work, but you
> can use it as an example to look into this further.
>
> transform everywhere = (mkT transform')
>     where transform = (\Term a->Flattened a)
>                            `extT` (Contstant a->Flattened a)
>
> Something like this should work. Look into the docs for more info.
>
> On 12/19/06, Grote Collective <grotecollective at gmail.com> wrote:
> > Hello all,
> >
> > I have two datatypes, both representing the same language. However, one is a
> > "flattened" version of the other. For instance:
> >
> > data Flattened =
> >   Const Flattened
> >   | Sum Flattened Flattened
> >   | ...
> >   | IntConst Int
> >   | RealConst Float
> >   | BoolConst Bool
> >   | Void
> >
> > ----
> >
> > data Term =
> >     Const Constant
> >   | Sum Term Term
> >   | ...
> >
> > data Constant =
> >     IntConst Int
> >    | RealConst Float
> >   | BoolConst Bool
> >   | Void
> >
> >
> > Now I want to create functions to convert between these two datatypes. This
> > is easy to do but *very* tedious in its most naive approach. However, I
> > think I can use Data.Generics to make a simple implementation of both
> > functions. The question is: can I? I think that this conversion is a simple
> > fold over the structure, changing merely the constructor name (the qualified
> > name, because the unqualified name is the same), but I cannot seem to
> > understand from the documentation how to do this...
> >
> > Thanks in advance,
> > Mark Smith
> >
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
> >
> >
>


More information about the Haskell-Cafe mailing list