[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