سؤال

أنا أتعلم أسهم هاسكل في حالة تحليل صفحة 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
  1. كيفية كتابة allRegions؟أو بالأحرى أين يجب أن أحفر لأكتبه؟
  2. سؤال آخر هو كيفية ليس فقط إلحاق regionsنتيجة ولكن إدراج baseRegion إلى مكان معين من قائمة المناطق (على سبيل المثال بعد العنصر الثاني أو بعد عنصر يبدأ اسمه بالحرف "E")؟
هل كانت مفيدة؟

المحلول

أعتقد أن combinator الذي تبحث عنه هو (>>.) في ال ArrowList فئة النوع.يسمح لك بتطبيق أي وظيفة قائمة على السهم.على سبيل المثالسيكون إضافة عنصر إلى مقدمة السهم.

regions tree >>. (baseRegion:)

بالنسبة لسؤالك الثاني، يمكنك كتابة دالة مساعدة لإدراج المنطقة في القائمة في المكان الصحيح، على سبيل المثال.شيء مع التوقيع مثل

insertRegion :: Region -> [Region] -> [Region]

ومن ثم يمكنك استخدامه على السهم

regions tree >>. insertRegion baseRegion

راجع للشغل أود شخصيًا إزالة معلمة الشجرة من ملفك regions وظيفة واستخدام تسلسل الأسهم الصريحة حتى يصبح ما ورد أعلاه.

tree >>> regions >>. insertRegion baseRegion
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top