[Haskell-cafe] predicates in XML toolboxes

Henning Thielemann lemming at henning-thielemann.de
Tue Apr 12 08:32:53 EDT 2005

On Tue, 12 Apr 2005, Malcolm Wallace wrote:

> Henning Thielemann <lemming at henning-thielemann.de> writes:
>> The XML toolboxes HaXml, HXML and the XML toolbox uses one function type
>> (called filter) for different purposes.
>> predicates                   a -> Bool
>> selectors, transformators    a -> a
>> list-valued functions        a -> [a]
>> are all implemented with the one type (a -> [a]).
>>   In my opinion this means a significant loss of type safety and quality of
>> documentation. Are there more type safe XML/HTML processor libraries in
>> Haskell?
> When we were first experimenting with designs that later became
> HaXml, we did indeed have separate notions of predicate, transformer,
> selector, and so on.  But having lots of different types like this
> meant it was more difficult to plug things together nicely into a
> combinator framework.  Thus, we decided to squash everything together
> into the filter type, so each piece was modular and could fit with
> any other piece.  I think it was a good design.

What about providing combinators for the most common cases and provide 
lifting functions for the uncommon cases, such as

liftPred :: (a -> Bool) -> (a -> [a])
liftPred p x = if p x then [x] else []

liftTrans :: (a -> b) -> (a -> [b])
liftTrans f x = [f x]


More information about the Haskell-Cafe mailing list