请注意,ClientM还有一个MonadBaseControl IO ClientM用于此类事情的实例.例如,我认为以下应该是typecheck(并且可以与之一起使用m ~ ClientM).
finally' :: MonadBaseControl IO m => m a -> m b -> m a
finally' x y = control $ \runInIO -> catch (runInIO x) (runInIO y)
Run Code Online (Sandbox Code Playgroud)
不仅是上面的类型检查,而且它被定义lifted-base为finally.