[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
<key>Thumbnail</key>
<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.
Regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
More information about the Haskell-Cafe
mailing list