我看到 这里
-- Note that "forever" isn't necessarily non-terminating.
-- If the action is in a @'MonadPlus'@ and short-circuits after some number of iterations.
-- then @'forever'@ actually returns `mzero`, effectively short-circuiting its caller.
坦白说,我不理解这个注释的意思。他们是否意味着可以使用
MonadPlus
来中断forever
,例如-IO Bool
?假设IO False
将会中断它...从某种角度来看,
IO
也是MonadPlus
。也许我必须将我的IO Bool
包装在其他东西中,才能实现使用IO Bool
和MonadPlus
中断forever
的可能性吗?这个注释到底是什么意思?当然,我可以通过异常或自己实现
forever
来中断它,但我的兴趣在于这个奇怪的注释。
forever (mzero :: Maybe Int)
只返回Nothing
。对于IO
,forever (mzero :: IO ())
抛出一个错误。 - snak