Hi all, I made a little extension that makes it a bit easier to work with Multiplate, there's a detailed explanation here: http://hackage.haskell.org/package/multiplate-simplified
However, there's still some biolerplate that could be eliminated but I can't seem to do it nicely. When writing a Multiplate instance one has define a method called mkPlate: mkPlate build = Plate (build pProg) (build pDecl) (build pExpr) (build pVar) by using my package all arguments for Plate can be the same: mkPlate build = Plate (build $ getProjector undefined undefined) (build $ getProjector undefined undefined) (build $ getProjector undefined undefined) (build $ getProjector undefined undefined) but the following doesn't work: withProj build = build $ getProjector undefined undefined mkPlate build = Plate (withProj build) (withProj build) (withProj build) (withProj build) neither does this one, though it gives a less scary error message: mkPlate build = Plate withProj withProj withProj withProj where withProj = build $ getProjector undefined undefined All the code necessary to test this is included at the end of the source of the modules's hackage page. Also, there's a probably similar issue if I define functions from Multiplate like this: makeG funcFor = \ f a -> funcFor (getProjector f a) f a gtraverseFor = makeG traverseFor but this one works: gtraverseFor :: (IsProjector p a) => p Identity -> a -> a gtraverseFor f a = traverseFor (getProjector f a) f a On Sat, Nov 20, 2010 at 04:45, <rocon...@theorem.ca> wrote: > Multiplate is a lightweight generic library for mutually recursive data > types that won't make Conor lose his lunch. > > Multiplate is an alternative extension of the Uniplate/Compos core design > to support mutually recursive datatypes in a way that is as powerful as > Compos, almost as easy to use as Uniplate, and more portable than both of > them. > > Multiplate does not require you to rewrite your data type, does not require > run-time reflection, does not require GADTs, and does not even require > multi-parameter type classes. It only requires rank 3 polymorphism. > > <http://hackage.haskell.org/package/multiplate-0.0.1> > > A more detailed paper is forthcoming, but the library is available to try > right now. > > -- > Russell O'Connor <http://r6.ca/> > ``All talk about `theft,''' the general counsel of the American Graphophone > Company wrote, ``is the merest claptrap, for there exists no property in > ideas musical, literary or artistic, except as defined by statute.'' > _______________________________________________ > 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