Я пытаюсь выучить Arrows в Haskell, поэтому я пишу простое приложение с библиотекой HXT для XML на основе стрелок.Примеры в вики и руководствах по HXT отказываются от сигнатур типов функций.Однако я очень люблю типы и пытаюсь понять, как их использовать.Здесь я встретил камень преткновения.С учетом этих функций:
readXml str = runX (readString [withValidate no] str)
atTag tag = deep (isElem >>> hasName tag)
Я полагаю, им должны быть назначены следующие подписи:
readXml ∷ String → IO [XmlTree]
atTag ∷ ArrowXml a ⇒ String → a XmlTree XmlTree
Я пытаюсь соединить их, используя синтаксис стрелки как таковой:
parseItem = proc str -> do
desc <- text <<< atTag "description" <<< arr readXml -< str
...
Однако, если мои мои сигнатуры типов верны (GHC не жаловался), мне понадобится способ объединить синтаксис монады и синтаксиса стрелок, чтобы получить XmlTree
из и вернуться к IO
,
Я не уверен, как поступить.У кого-нибудь есть идеи?