سهام هاسكل:إدراج قيمة إلى القائمة
سؤال
أنا أتعلم أسهم هاسكل في حالة تحليل صفحة HTML بسيطة.المهمة هي تنزيل موقع المنطقة الأساسية baseRegion = Region "Yekaterinburg" "http://example.com/r/ekb"
, ، تحليل الروابط إلى مناطق أخرى (عبر hxt):
regions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
regions tree =
tree >>> multi (hasName "a" >>> hasAttrValue "class" (== ".regionlink")) >>>
proc x -> do
rname <- getText <<< getChildren -< x
rurl <- getAttrValue "href" -< x
returnA -< Region rname rurl
وإلحاق منطقة أساسية بالنتيجة:
allRegions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
- كيفية كتابة
allRegions
؟أو بالأحرى أين يجب أن أحفر لأكتبه؟ - سؤال آخر هو كيفية ليس فقط إلحاق
regions
نتيجة ولكن إدراجbaseRegion
إلى مكان معين من قائمة المناطق (على سبيل المثال بعد العنصر الثاني أو بعد عنصر يبدأ اسمه بالحرف "E")؟
المحلول
أعتقد أن combinator الذي تبحث عنه هو (>>.)
في ال ArrowList
فئة النوع.يسمح لك بتطبيق أي وظيفة قائمة على السهم.على سبيل المثالسيكون إضافة عنصر إلى مقدمة السهم.
regions tree >>. (baseRegion:)
بالنسبة لسؤالك الثاني، يمكنك كتابة دالة مساعدة لإدراج المنطقة في القائمة في المكان الصحيح، على سبيل المثال.شيء مع التوقيع مثل
insertRegion :: Region -> [Region] -> [Region]
ومن ثم يمكنك استخدامه على السهم
regions tree >>. insertRegion baseRegion
راجع للشغل أود شخصيًا إزالة معلمة الشجرة من ملفك regions
وظيفة واستخدام تسلسل الأسهم الصريحة حتى يصبح ما ورد أعلاه.
tree >>> regions >>. insertRegion baseRegion
لا تنتمي إلى StackOverflow