انهيار السهم إلى القائمة
سؤال
أواجه بعض المشاكل مع hxt, ، على الرغم من أنني أظن أنه مجرد شيء أفتقده في الأسهم.
لدي بنية XML مثل
<str name="field1">value</str>
<lst name="field2"><str>value2</str><str>value3</str></lst>
والهيكل الداخلي مثل
data XmlData = XmlStr String | XmlList XmlData
هل هناك طريقة لجمع العناصر في خطوة في السهم؟
getXmlData :: IOSArrow XmlTree (String, XmlData)
getXmlData = (getAttrl >>> getChildren >>> getText) &&&
((filterByType "str" >>> getText >>> arr (\x -> XmlStr x))
<+> (filterByType "lst" >>> getXmlData))
where filterByType t = isElem >>> hasName t >>> getChildren
تحتاج الدعوة العودية إلى getxmldata إلى جمع إجابتها واللف في مُنشئ Xmllist ، لكنني لا أعرف كيفية جمع المصطلحات. أنا حاليًا أقوم بإنجاز هذا مع بعض المعالجة المنشورة على الإخراج (التجميع على نفس الاسم) ، لكني أرغب في حل أفضل.
المحلول
بشكل عام يمكنك استخدامه listA
من عند Control.Arrow.ArrowList
لفعل هذا. له نوع (ArrowList a) => a b c -> a b [c]
وهو
combinator لتحويل سهم إلى إصدار محدد مع جميع النتائج التي تم جمعها في قائمة عنصر واحد.
(انظر إجاباتي هنا و هنا للحصول على مثال ملموس.)
في هذه الحالة المحددة ، يمكنك استخدام >.
combinator مع XmlList
مُنشئ كحجة ثانية لإنجاز نفس الشيء بشكل أكثر دقة.