小编CR *_*ost的帖子

为什么MonadIO特定于IO,而不是更通用的MonadTrans?

所以在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)

io haskell types monad-transformers

8
推荐指数
2
解决办法
796
查看次数

如何使SwiftUI全屏显示?

就像标题已经说过的那样,我正在尝试使全屏视图(使其扩展到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)

ios swift swiftui

1
推荐指数
3
解决办法
1592
查看次数

标签 统计

haskell ×1

io ×1

ios ×1

monad-transformers ×1

swift ×1

swiftui ×1

types ×1