2013-05-16 24 views

Odpowiedz

2

To nie jest odpowiedź, ale nie mieści się w komentarzu.

Chciałbym również podobną funkcjonalność. Podejrzewam, że rodzaj wewnętrznej będzie wyglądać następująco:

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

Ponadto, może nie być możliwe z obecnie istniejących maszyn, ale to jest w porządku. Na przykład sprawdź transformator pośredniczący StateP, który opiera się na thread_P z ProxyInternal. Podobny analog do thread_P może być niezbędny do implementacji FreeP.

Powiązane problemy