[Haskell] ANN: Uniplate 1.0
Neil Mitchell
ndmitchell at gmail.com
Fri Jun 15 12:12:59 EDT 2007
Hi,
I am pleased to announce Uniplate (formerly known as Play), a library
for boilerplate removal requiring only Haskell 98 (for normal use) and
optionally multi-parameter type classes (for more advanced features).
This library has been tested with Yhc, Hugs and GHC.
The Uniplate library can do some of the same things as Scrap Your
Boilerplate (SYB), and has functions that can be used in a similar
manner to everywhere and everything.
LINKS
Project home page: http://www-users.cs.york.ac.uk/~ndm/uniplate/
Hackage release:
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/uniplate-1.0
Haddock docs: http://www.cs.york.ac.uk/fp/haddock/uniplate/
Short Manual: http://www.cs.york.ac.uk/fp/darcs/uniplate/uniplate.htm
Draft Paper: http://www-users.cs.york.ac.uk/~ndm/downloads/draft-uniplate-15_jun_2007.pdf
The manual contains a basic overview of some bits of the library, the
paper goes into more detail, but is intended to still be a readable
introduction to the library.
A SHORT EXAMPLE
Given an Int expression data type:
data Expr = Add Expr Expr | Val Int
| Sub Expr Expr | Var String
| Mul Expr Expr | Neg Expr
| Div Expr Expr
We can extract all the variables using the function:
variables :: Expr -> [String]
variables (Var x ) = [x]
variables (Val x ) = []
variables (Neg x ) = variables x
variables (Add x y) = variables x ++ variables y
variables (Sub x y) = variables x ++ variables y
variables (Mul x y) = variables x ++ variables y
variables (Div x y) = variables x ++ variables y
Or we can use the Uniplate library:
variables :: Expr -> [String]
variables x = [y | Var y <- universe x]
THANKS TO:
Colin Runciman, Bjorn Bringert, Jules Bean, Eric Mertens, Tom Shackell
and Stefan
O'Rear for various help and feedback.
The Uniplate library has been used in Yhc, Catch, Hoogle and other
projects. Please direct any follow-up discussion to haskell-cafe.
Thanks
Neil
More information about the Haskell
mailing list