有没有免费的代理转换器?



你认为免费的代理转换器是可能的吗?就像

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
    ....

这不仅是好奇,我实际上会发现这很有用。

这不是答案,但不适合放在注释中。

我也想要类似的功能。我怀疑内部类型应该是这样的:

-- 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代理变压器依赖于ProxyInternal中的thread_P。实现FreeP可能需要类似于thread_P的模拟。

最新更新