繁体   English   中英

是否可以保证在任何MonadIO中执行操作都无效?

[英]Is void guaranteed to execute action in any MonadIO?

我有一个IO a值,但需要将IO ()传递给Xmonad函数。 我用:

void . spawn :: MonadIO f => String -> f ()

什么能保证我的行动得以执行? 它适用于所有正确的MonadIO实例吗?

正是 void的目的:执行操作并忽略结果值。 文档中

void value放弃或忽略评估结果,例如IO操作的返回值。

请注意,它说它忽略了评估结果 ,暗示评估确实发生了,即发生了副作用。

可以定义为:

void action = action >> return ()

(或者以许多其他方式base的实现更为通用)。

显然,您可能有一个虚假的定义,例如:

void _ = return ()

不会执行该操作。 AFAIK类型不足以表现出这种可能性,因此,如果您真的不信任该包,则必须编写自己的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM