[Haskell-cafe] How to write transform one set of ADTs to another with SYB?
adam vogt
vogt.adam at gmail.com
Sat Aug 23 17:10:40 UTC 2014
Hi Ducis,
Did you mean: "data AA = AA" when you write "data ASTAttachment = AA"?
In any case, you can write Data instances that cover (ASTExpr AA) and
(ASTExpr ()) with:
deriving instance (Data t, Data (AST t)) => Data (ASTMany t)
deriving instance (Data t, Data (AST t)) => Data (ASTOp t)
deriving instance (Data t, Data (AST t)) => Data (ASTExpr t)
As for writing a
f :: (Data (t AA), Data (t ())) => t () -> t AA
where t could be ASTExpr, it might help to look at the two options
here: http://www.haskell.org/haskellwiki/Scrap_your_boilerplate#fmap
Regards,
Adam
On Sat, Aug 23, 2014 at 10:24 AM, ducis <ducis_cn at 126.com> wrote:
> More specifically, I want to transform a tree of SomeExpr to a tree of
> (SomethingElse, SomeExpr), "prefixing" each node with a default value in the
> process.
> The result have essentially the same structure as the input.
>
> data ASTAttachment = AA {} deriving (Eq,Read,Show,Ord,Typeable,Data)
> type family AST a :: *
> type instance AST () = ASTExpr ()
> type instance AST AA = (AA, ASTExpr AA)
> data ASTExpr a
> = ALiteral String
> | AApplication [AST a] (ASTOp a)
> | ARef String
> | ABind (AST a) String
> | AMany (ASTMany a)
> data ASTOp a
> = AOSym String
> | AOAlpha String
> | AOMany (ASTMany a)
> data ASTMany a
> = AMSimple [AST a]
> | AMAggeregate [AST a]
> deriving instance Typeable ASTMany
> deriving instance Typeable ASTOp
> deriving instance Typeable ASTExpr
> deriving instance Data (ASTMany ())
> deriving instance Data (ASTOp ())
> deriving instance Data (ASTExpr ())
>
> Currently I have values of type (AST ()), and I need to transform them to
> (AST ASTAttachment) in the obvious way.
> Now I'm stuck at "derive instance Data (ASTExpr ASTAttachment)", where ghc
> reports "Multiple declarations of '$cSomeConstructor'".
> Even if I can get past this, I still don't know how to use SYB to transform
> between trees of different types.
>
>
>
> _______________________________________________
> 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