2013-05-16 2 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, который опирается на thread_P от ProxyInternal. Аналогичный аналог thread_P может понадобиться для реализации FreeP.