我正在尝试为表示云中计算的类型创建MonadIO
的实例。因此liftIO
代表在本地执行的IO
操作。
transient-universe,提供此功能的库提供了一个完成此功能的函数localIO
。但它在其他一些库中无法组合,可以嵌入任何其他MonadIO
。
问题是,localIO
要求IO
操作的返回类型是Read
,Show
和Typeable
的实例。鉴于MonadIO
没有考虑这种情况:
class MonadIO m where
liftIO :: IO a -> m a
在我的情况下,我需要编写另一个类型类:
class RestrictableMonadIO (m a) where
liftRestrictedIO :: IO a -> m a
所以它允许我这样做:
instance (Read a, Show a, Typeable a) => MonadIO (Cloud a) where
liftRestrictedIO = localIO
有没有办法在不必声明自己的类型类的情况下执行此操作?