Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 将monad转换为IO_Haskell_Monads - Fatal编程技术网

Haskell 将monad转换为IO

Haskell 将monad转换为IO,haskell,monads,Haskell,Monads,我想使用,签名ioa->iob->ioa 然而,我想要使用的操作基于不同于IO(即的)的monad 我知道,但这似乎适得其反--ioa->ma 如何将我的monads转换为IOs,或最终提升以操作我的monads?请注意ClientM还有一个MonadBaseControl IO ClientM实例,用于此类操作。例如,我认为以下内容应该进行类型检查(并且可以与m~ClientM一起使用) 编辑 不仅上面的类型检查,而且它是在中定义的。似乎ClientM必须在某个点上与一起运行,这将其归结为IO

我想使用,签名
ioa->iob->ioa

然而,我想要使用的操作基于不同于
IO
(即的)的monad

我知道,但这似乎适得其反--
ioa->ma


如何将我的monads转换为IOs,或最终提升
以操作我的monads?

请注意
ClientM
还有一个
MonadBaseControl IO ClientM
实例,用于此类操作。例如,我认为以下内容应该进行类型检查(并且可以与
m~ClientM
一起使用)

编辑
不仅上面的类型检查,而且它是在中定义的。

似乎
ClientM
必须在某个点上与一起运行,这将其归结为
IO


如果恰好适合您的情况,可能最简单的解决方案是使用
finally
来包装由此产生的
IO
操作。

谢谢您的帮助!如果我想找到这个黑魔法,我会迷路的。不过,我在尝试使用它的
MonadBaseControl
实例时,不知怎的遇到了一个错误——我把它作为一个新问题发布了。
finally' :: MonadBaseControl IO m => m a -> m b -> m a
finally' x y = control $ \runInIO -> catch (runInIO x) (runInIO y)