我有一个IO a
值,但需要将IO ()
传递给Xmonad
函数。我用:
void . spawn :: MonadIO f => String -> f ()
什么保证我的行动会执行?它是否适用于所有正确的MonadIO
个实例?
答案 0 :(得分:2)
完全 void
的目的:执行操作并忽略结果值。来自documentation:
void value
会丢弃或忽略评估结果,例如 返回IO
操作的值。
请注意,它忽略评估结果,暗示评估确实发生,即副作用发生。
可以定义为:
void action = action >> return ()
(或者在许多其他方面。base
's implementation更为通用)。
显然你可能有一个虚假的定义,如:
void _ = return ()
不执行该操作。 AFAIK的类型不足以消除这种可能性,所以如果你真的不相信包,那么你必须编写自己的实现。