2013-05-16 5 views
7

Pensez-vous qu'un transformateur proxy gratuit est possible? Quelque chose commeExiste-t-il un transformateur proxy gratuit?

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

Ce n'est pas seulement de la curiosité que je trouverais cela utile.

Répondre

2

Ceci n'est pas une réponse, mais il ne rentre pas dans un commentaire.

Je voulais une fonctionnalité similaire, aussi. Je soupçonne que le type interne ressemblera à ceci:

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

En outre, il pourrait ne pas être possible avec les machines qui existent actuellement, mais c'est correct. Par exemple, consultez le transformateur proxy StateP, qui repose sur thread_P de ProxyInternal. Un analogue similaire à thread_P peut être nécessaire pour implémenter FreeP.

Questions connexes