有免费的代理变压器吗?

时间:2013-05-16 16:05:55

标签: haskell monad-transformers free-monad

您认为可以使用免费代理变压器吗?像

这样的东西
data FreePT f p a' a b' b m r = ....

instance (Proxy p,Functor f) => Proxy (FreePT f p) where
    ....

instance (Functor f) => ProxyTrans (FreePT f) where
    ....

这不仅仅是好奇心,我实际上会觉得这很有用。

1 个答案:

答案 0 :(得分:2)

这不是答案,但不适合评论。

我也想要类似的功能。我怀疑内部类型将如下所示:

-- The same `FreeF` type from the `free` package in `Control.Monad.Trans.Free`
data FreeF f a x = Pure a | Free (f x)

newtype FreeP f p a' a b' b m r
    = FreeP { unFreeP ::
        p a'
          (FreeF f a (FreeP f p a' a b' b m r))
          b'
          (FreeF f b (FreeP f p a' a b' b m r))
          m
          (FreeF f r (FreeP f p a' a b' b m r)) }

此外,目前现有的机器可能无法实现,但这没关系。例如,请参阅StateP代理转换器,该转换器依赖于thread_P中的ProxyInternal。实施thread_P可能需要与FreeP类似的模拟。