尽早终止xeno SAX解析器

问题描述 投票:1回答:1

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需要支持状态,并且短路后需要该状态可用。

xml haskell sax
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.