2015-03-08 11 views
21

Gram w architekturę aplikacji i darmowe monady w haskell. Załatwiłem to, z wyjątkiem tego, jak podnieść moją "instrukcję" do właściwej szczeliny mojego współproduktu bez wyraźnego podania pełnej ścieżki lewej/prawej.Automatyczna selekcja interpretera za pomocą darmowej Monady i Produktu Koprodukcyjnego

Oto przykład Haskell pracuję od: https://gist.github.com/aaronlevin/87465696ba6c554bc72b#file-reasonable-hs

Tutaj, aby wstrzyknąć typy na współproduktu, jawnie wspomnieć ścieżkę.

Na przykład:

Program :: Coproduct Interaction (Coproduct Auth Logging) a 
logC :: (Functor f) => (forall a. Logging a -> f a) -> String -> Free f() 

logger :: String -> Free Program() 
logger = logC (Program . Coproduct . Right . Coproduct . Right) 

Tutaj, rejestrator musi być umieszczone w odpowiednim gnieździe w współproduktu ręcznie z Coproduct . Right . Coproduct . Right

rozmowa Rúnar w Scala używa niejawne konwersje typów i typeclass Inject do osiągnięcia tego celu Wynik: https://gist.github.com/runarorama/a8fab38e473fafa0921d#file-gistfile1-scala-L119

W skrócie, zastanawiam się, czy jest sposób, aby to zrobić w haskell.

+10

Przypomina mi się od razu o Świecie [Typy danych a la Carte] (http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=1899152), która używa sztuczki prologu klasy typowej do efektów wrzutowych we właściwe miejsce w stos. –

+0

To była poprawna odpowiedź. To mi pomogło: http://okmij.org/ftp/Haskell/extensible/ALaCarte.hs Dziękuję bardzo za skontaktowanie się z odpowiedzią – Brian

+1

@Brian Jeśli rozwiązałeś swój problem, mógłbyś udzielić odpowiedzi pytanie i zaakceptować? – Bakuriu

Odpowiedz

1

Wypełnienie sekcji odpowiedź od komentarzach do pierwotnego pytania ...

Oryginalny papier Haskell można znaleźć tutaj: Data Types à la Carte

Haskell realizacja można znaleźć tutaj: ALaCarte.hs

Powiązane problemy