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
需要支持状态,并且短路后该状态必须可用。
答案 0 :(得分:1)
您仅从process
的类型签名中就可以肯定地知道它,而没有看到它的实现:答案是明确的“是的,您可以使其提前终止”。 ExceptT
是规范的早期退出monad变压器系列。使用throwE
或throwError
立即终止控制流。