无效保证在任何MonadIO中执行操作?

时间:2016-02-21 17:11:48

标签: haskell lazy-evaluation xmonad

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

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

什么保证我的行动会执行?它是否适用于所有正确的MonadIO个实例?

1 个答案:

答案 0 :(得分:2)

完全 void的目的:执行操作并忽略结果值。来自documentation

  

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

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

可以定义为:

void action = action >> return ()

(或者在许多其他方面。base's implementation更为通用)。

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

void _ = return ()

不执行该操作。 AFAIK的类型不足以消除这种可能性,所以如果你真的不相信包,那么你必须编写自己的实现。