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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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@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

Reply via email to