尽早终止xeno SAX解析器

时间:2020-01-13 21:19:41

标签: xml haskell sax

xeno是一个快速的XML解析库。它是SAX样式的解析函数,具有以下类型:

process
  :: Monad m
  => (ByteString -> m ()) -- ^ Open tag.
  -> (ByteString -> ByteString -> m ()) -- ^ Tag attribute.
  -> (ByteString -> m ()) -- ^ End open tag.
  -> (ByteString -> m ()) -- ^ Text.
  -> (ByteString -> m ()) -- ^ Close tag.
  -> (ByteString -> m ()) -- ^ CDATA.
  -> ByteString
  -> m ()

是否可以选择m来从处理程序中尽早终止process?提早终止是指process退出而不处理文档的其余部分,即没有其他工作。

我知道可以使用IO和异常来完成。是否可以在IO中完成而不使用控制流例外?可以在没有IO的情况下完成吗?

从上面的类型中,我们甚至可以肯定地说出来还是我们还需要知道process的定义?

编辑:

请假设m需要支持状态,并且短路后该状态必须可用。

1 个答案:

答案 0 :(得分:1)

您仅从process的类型签名中就可以肯定地知道它,而没有看到它的实现:答案是明确的“是的,您可以使其提前终止”。 ExceptT是规范的早期退出monad变压器系列。使用throwEthrowError立即终止控制流。

相关问题