Byłem rozmyślałem wokół idei jak chcesz zbudować ramy MVC w Haskell w formie z WPF lub angularjs, ale nie wydaje się znaleźć podstawowe typy lub pomysł, aby dostać Rozpoczęty. Więc, niestety, niejasne pytanie - czy ktoś jeszcze zastanawiał się nad tym problemem?Obiektywy do MVC ram Haskell
widzę edit-soczewki, wielotarczowe i compos, ale myślę, że wszyscy oni rozwiązać nieco inne problemy.
Mój szorstki szkic jak to będzie działać będzie:
- Tworzenie modelu jako struktury danych zwykły Haskell
- Utwórz zestaw „szkieł” lub polecenia, aby zmodyfikować swój model.
- Napisz HTML (lub cokolwiek) szablon, który jest parametryzowany przez typy w modelu.
.
data Model = Page { _title :: String, _content :: [(Int, String)] }
title :: Lens Model String
content :: Int -> Lens Model (Maybe String)
Następnie chciałbym, aby móc napisać funkcję:
Model -> Template Model -> Html
oraz funkcję aktualizacji części moim zdaniem, kiedy stosuje się soczewki.
Lens Model a -> a -> HtmlTemplate Model -> [(Path, Html)]
Sądzę więc, że chodzi o to, jaki typ obiektywu mógłby objąć jedną strukturę danych, a następnie można go wykorzystać do opisania zmiany w innej.
Jedną z możliwości wydaje się stworzenie GADT, który owija wszystkie soczewki, a następnie szablon HTML nad typem GADT, który można następnie wykorzystać do dopasowania do szablonu w każdym kroku. na przykład
data Lenses a b where
Title :: Lens Model String -> Lenses Model String
Item :: Lens Model String -> Lenses Model (Maybe String)
Następnie typ danych szablonu HTML, np.
data HtmlTemplate a = Text String
| Element String [Attrib a]
| forall b. Binding (Lenses a b) (Html b)
Do którego elementu powiązania można dopasować wzór bezpośrednio.
ale wydaje prawie pokonując punkt, ponieważ model jest następnie połączone na biodra do widzenia.
Zastanawiam się, czy ktoś (mądrzejszy ode mnie) zastanawiał się, jak to może działać? A może to dobry pomysł?
Uruchomiłem eksperymentalną bibliotekę soczewek przeznaczoną do obsługi dowolnych, efektywnych operacji, które mogą Cię zainteresować (nie możesz polecać korzystania z niego w momencie, gdy interfejs API będzie się zmieniał, jest eksperymentalny i był okrągły o której mowa, kiedy to było omawiane na Reddicie). najbliższy twojej sprawie byłby ostatnim przykładem w [tym wpisie] (http://brandon.si/code/yall/); prawdopodobnie będziesz chciał, aby twój widok był modyfikowany w 'State', kiedy robisz obiektywy na modelu:' LensM (State View) Model a' lub coś w tym stylu. ale nie użyłem zbyt wiele wzorca MVC, więc wybacz mi, gdybym nie był – jberryman
Myślę, że jest to co najmniej połowa rozwiązania, dzięki czemu można albo utworzyć zmiany w widoku (albo zmodyfikować widok bezpośrednio) . Myślę jednak, że to, czego mi brakuje, to mechanizm do przemierzania modelu i widoku (szablonowy model) razem - jakiś rodzaj zipa, który przemierza dwie powiązane struktury w tym samym czasie. – Oliver
Możesz być zainteresowany http://www.haskellforall.com/2014/04/model-view-controller-haskell-style.html – hdgarrood