2013-05-16 49 views
7

您認爲免費的代理變壓器是可能的嗎?類似於是否有免費的代理變壓器?

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

這不僅是好奇心,我實際上會覺得這很有用。

回答

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代理變壓器,該代理變壓器依賴於ProxyInternalthread_P。可能需要與thread_P類似的模擬來實現FreeP

相關問題