On Tue, 12 Apr 2005, Malcolm Wallace wrote:

Henning Thielemann <[EMAIL PROTECTED]> 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]

?
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to