[Haskell-cafe] Re: Who is afraid of arrows, was Re: ANNOUNCE: Haskell XML Toolbox Version 9.0.0

Heinrich Apfelmus apfelmus at quantentunnel.de
Mon Oct 18 04:56:29 EDT 2010

Malcolm Wallace wrote:
> Heinrich Apfelmus wrote:
>> Personally, I would be much happier with the slogan "HXT = XML
>> transformations with filters". Browsing through Manuel's thesis, I
>> discover that your combinators are quite slick ( >>> , choiceA , when,
>> guards ), it's just that they are a very specialized subset of the
>> general arrow combinators. I think that dropping the arrows and
>> rebranding your nice set of combinators as "filter combinators" would
>> greatly improve the library.
> But then, HXT's filter combinators would return to being rather like 
> HaXml's filter combinators, where the concept was first introduced.  
> Personally, I'm very happy that customers avoid HXT (due to the 
> complexity of the arrow interface), because that means more customers 
> for HaXml...  :-)

Well, having seen some HXT code, the old HaXml filters appear somewhat 
dusty to me. ;-)

For example, Nikiti Dimitriy's code

> data MyAttr = MyAttr String String
> getAttrs = deep (isElem >>> hasName "SomeTag") >>>
> proc x -> do
> aname <- getAttrValue "Name" -< x
> atype <- getAttrValue "Type" -< x
> returnA -< MyAttr aname atype

illustrates that there is no obvious way to extract non-XML values, like 
a pair of attribute values. I'm not keen on the  proc  syntax; this is 
best modeled as an applicative functor.

Other useful innovations that I think are worth incorporating into HaXml 
in some form:

*  choiceA , a nifty case statement for filters, generalizing "if then else"
*  listA , a filter that returns the list of results as a single 
element. This is pretty much the only way to process XML files that use 
positional information as well (compared to nesting alone). For 
instance, the (old) Apple .plist format works like that

    <key>Caption</key>                 -- key
    <string>Haskell Logo</string>      -- value
    <string>/Volumes/Macintosh HD/</string>

(This is similar to the purpose of the + selector in CSS, e.g.  h2 + p   )

Oh, and last but not least, I think the Haddock documentation for 
Text.XML.HaXml.Combinators is a bit sparse. The paper should be 
hyperlinked from the docs, and I would very much like to see 
documentation for the individual filters, with laws and implementation 
and all.

Heinrich Apfelmus


More information about the Haskell-Cafe mailing list