[Haskell-cafe] Re: [Haskell] best way to do generic programming?
Thomas Jäger
thjaeger at gmail.com
Fri Jul 1 06:48:24 EDT 2005
Arka,
as you already mentioned, you want to have a look at the "Scrap your
Boilerplate" approach.
> import Data.Generics
> ...
> data Expr = Const Int | Var String | Add Expr Expr deriving (Typeable, Data)
will derive the necessary Data instance and allow you to define
> optimizeDeep :: Data a => a -> a
> optimizeDeep = everywhere (mkT optimize)
On 7/1/05, Arka al Eel <arkaaleel at gmail.com> wrote:
> Hi,
>
> I'm playing with generic programming. At the moment I'm interested in
> reusable transformations on data types. Provided for example a toy
> datatype Expr like this:
>
> data Expr = Const Int | Var String | Add Expr Expr
>
> Plus a function "optimize" that optimizes a pattern "x + 0" into "x":
>
> optimize (Add x (Const 0)) = x
>
> You would now want this to be this generic, so the function should be
> recursive for all other constructors *and* other data types. For
> example, suppose that Expr is included in other datatype:
>
> data Stm = Assign String Expr | Seq Stm Stm
>
> I now want the "optimize" transformation to work on Stm, like
> this:
>
> x = optimize (Seq (Assign (Add (Var "x") (Const 0))) blah blah)
> with a sensible solution in an hour, while I can do this in two
> minutes in Scheme. After all, writing compilers is supposed to be a
> *strong* point of Haskell. Real world is knocking on your door, guys!
Thomas
More information about the Haskell-Cafe
mailing list