对MonadIO返回类型施加约束

时间:2017-08-17 10:45:37

标签: haskell functional-programming monads typeclass monad-transformers

我正在尝试为表示云中计算的类型创建MonadIO的实例。因此liftIO代表在本地执行的IO操作。

transient-universe,提供此功能的库提供了一个完成此功能的函数localIO。但它在其他一些库中无法组合,可以嵌入任何其他MonadIO

问题是,localIO要求IO操作的返回类型是ReadShowTypeable的实例。鉴于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

有没有办法在不必声明自己的类型类的情况下执行此操作?

0 个答案:

没有答案
相关问题