Я пытаюсь изучить стрелки в 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 hasn ' t жаловался), мне понадобится способ объединения синтаксиса монады и синтаксиса стрелок, чтобы получить XmlTree
из и вернуть в IO
.
Я не знаю, что делать дальше. У кого-нибудь есть идеи?