2013-05-16 5 views
7

Glauben Sie, dass ein kostenloser Proxy-Transformer möglich ist? So etwas wieGibt es einen kostenlosen Proxy-Transformer?

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

Dies ist nicht nur Neugierde, die ich eigentlich nützlich finden würde.

Antwort

2

Dies ist keine Antwort, aber es passt nicht in einen Kommentar.

Ich wollte eine ähnliche Funktionalität auch haben. Ich vermute, dass der interne Typ wird wie folgt aussehen:

-- 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)) } 

Auch ist es nicht mit den aktuell vorhandenen Maschinen möglich sein könnte, aber das ist in Ordnung. Konsultieren Sie zum Beispiel den StateP Proxy-Transformer, der auf thread_P von ProxyInternal angewiesen ist. Ein ähnliches Analog zu thread_P könnte erforderlich sein, um FreeP zu implementieren.