私は Haskell で Arrows を学習しようとしているので、XML 用の矢印ベースの HXT ライブラリーを使用して単純なアプリケーションを作成しています。HXT wiki とチュートリアルの例では、関数型のシグネチャが省略されています。しかし、私は型がとても好きで、それらをどのように使用するかを考え出そうとしています. ここで、つまずきに出会いました。これらの関数が与えられた場合:
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
。
進め方がわからない。誰にも洞察がありますか?