[Haskell-cafe] ANN: data-fix-cse -- Common subexpression elimination for EDSLs
Emil Axelsson
emax at chalmers.se
Tue Feb 19 14:28:10 CET 2013
Fully understandable! Compdata would be quite a heavy dependency for
your library.
I'm just generally fond of the idea of collecting all DSL implementation
tricks under one umbrella. That requires using the same term representation.
/ Emil
2013-02-19 14:12, Anton Kholomiov skrev:
> There are several packages that already define fixpoints (another one is
> about unification), but all packages that I'm aware of define a lot of
> functionality
> that I don't need (and actually don't understand, packages with fixpoint
> types
> tend to be rather dense with math). I'd like it to be simple and
> lightweight.
> Just fixpoints, just folds and unfolds.
>
>
> 2013/2/19 Emil Axelsson <emax at chalmers.se <mailto:emax at chalmers.se>>
>
> 2013-02-19 12:10, Anton Kholomiov skrev:
>
> I'm glad to announce the package for Commonsubexpression
> elimination [1].
>
> It's an implementation of the hashconsig algorithm as described
> in the
> paper
> 'Implementing Explicit and Finding Implicit Sharing in EDSLs' by
> Oleg
> Kiselyov.
>
> Main point of the library is to define this algorithm in the most
> generic way.
> You can define the AST for your DSL as fixpoint type[2]. And
> then all
> you need
> to use the library is to define the instance for type class
> `Traversable`.
>
>
> One way to make the library even more useful would have been to base
> it on compdata instead of data-fix. Compdata has support for
> composable types and lots of extra functionality. On the other hand,
> it's easy enough to translate from compdata terms to your `Fix`...
>
>
>
>
> One side-note form my experience: Fixpoint types can be very
> flexible.
> It's easy to compose them. If suddenly we need to add some extra
> data
> to all cases from the example above we can easily do it with
> just another
> Functor:
>
> Imagine that we want to use a SampleRate value with all signals.
> Then we can do it like this:
>
> type E = Fix SampledExp
>
> data SampledExp a = SampledExp SampleRate (Exp a)
>
> then we should define an instance of the type class Traversable
> for our new type SampleRate. The Exp doesn't change.
>
>
> Very useful indeed! A more principled way to extend data types in
> this way is Data Types à la Carte:
>
> http://dx.doi.org/10.1017/__S0956796808006758
> <http://dx.doi.org/10.1017/S0956796808006758>
>
> (Implemented in compdata.)
>
> / Emil
>
>
More information about the Haskell-Cafe
mailing list