所以在transformers我看来,
class (Monad m) => MonadIO m where
-- | Lift a computation from the 'IO' monad.
liftIO :: IO a -> m a
instance MonadIO IO where
liftIO = id
Run Code Online (Sandbox Code Playgroud)
我明白,这与MonadTrans不同的原因是,如果你有一些M1T (M2T (M3T (M4T IO))) x由4个组成的monad变换器组成,那么你不想,lift . lift . lift . lift $ putStrLn "abc"但你宁愿只是liftIO $ putStrLn "abc".
但是,IO当上面的基本定义似乎是这种奇怪的递归时,这种特殊性似乎非常奇怪liftIO.似乎应该为某些组合器设置一个newtype声明,(ExceptT :~: MaybeT) IO x这样lift你就可以得到一个单独的(我想这是一个monad变换器变换器吗?),或者是一些多参数类型,
class (Monad m) => MonadEmbed e m
-- | Lift …Run Code Online (Sandbox Code Playgroud) 就像标题已经说过的那样,我正在尝试使全屏视图(使其扩展到SafeArea),但SwiftUI似乎总是将视图与对齐safeArea。
经过一段时间的研究,我发现.edgesIgnoringSafeArea(.all)这似乎是一种非常简单的方法。问题是它不起作用。视图仍然不是全屏。这是一些示例代码:
struct ContentView : View {
var body: some View {
Text("Test")
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
.background(Color.red)
}
}
Run Code Online (Sandbox Code Playgroud)