gpt4 book ai didi

Haskell MonadIO 与 IO

转载 作者:行者123 更新时间:2023-12-03 15:57:08 25 4
gpt4 key购买 nike

两者有什么区别:

recompile :: MonadIO m => Bool -> m Bool
recompile :: Bool -> IO Bool

最佳答案

类型 forall m. MonadIO m => Bool -> m BoolBool -> IO Bool是同构的:

{-# LANGUAGE RankNTypes #-}
import Control.Monad.IO.Class

from :: (forall m. MonadIO m => Bool -> m Bool) -> (Bool -> IO Bool)
from act = act

to :: (Bool -> IO Bool) -> (forall m. MonadIO m => Bool -> m Bool)
to act = liftIO . act

Not all types involving IO are isomorphic to a version that replaces IO with a constrained m , though.

一般使用 MonadIO m而不是 m ~ IO当他们想散的时候 liftIO通过调用代码会很烦人或当有其他 mtl m 上需要 -style 约束;并使用 m ~ IO而不是 MonadIO m在追求 API 的简单性时( MonadIO m 会导致复杂性,因此不可取)或在处理 fork 或异常处理时(由于链接问题中讨论的原因, MonadIO m 是不可能的)。

关于Haskell MonadIO 与 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52387403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com