
On Tue, 12 Apr 2005, Malcolm Wallace wrote:
Henning Thielemann
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] ?