【发布时间】:2020-01-13 21:19:41
【问题描述】:
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 需要支持状态,并且该状态需要在短路后可用。
【问题讨论】:
-
当然可以。不过,解决方案领域有很多不同的选择。完成后您希望获得哪些信息,通常还是通过短路?
-
@Carl 我希望
m存储一些状态并在短路后检索该状态。应该说清楚了吧。如果它使事情变得更简单,假设我想找到具有特定名称的第一个节点,读取它的所有属性值,然后终止并拥有属性的Map ByteString ByteString。