Podejście, które zadziałało dla mnie, to użycie Reflex do renderowania SVG. Reflex sprawia, że renderowanie obiektów DOM na stronę WWW jest dość łatwe i reagowanie na kliknięcia myszą na te obiekty. Użycie SVG (zamiast płótna) umożliwia dostęp do renderowanych obiektów po początkowym wyświetleniu, zarówno w celu wyboru i edycji (zmiana rozmiaru, przenoszenie, zmiana koloru, usuwanie).
Oto trzy przykłady "pierwsze kroki", które używają refleksu/svg. Każda z nich zawiera działającą wersję demonstracyjną (powiązaną z plikiem readme).
Render circles in locations determined by the circle-packing package
Interactive knight's tour animation.
Rotating 3D cube
Biorąc pod uwagę, że te przykłady są oparte odruch, wszystkie one są napisane przy użyciu styl kodowania FRP ale starałem się zminimalizować część każdego z tych programów, które specyficznie używa technik FRP.
Na przykład obręcz rycerska i obracanie kostki mają blok rekursywny zawierający tylko wywołania do obejrzenia i aktualizację. W obu przypadkach, to blok kodu pozwala na informacje zwrotne od celu akumulacji zmian stanu (update foldDyn)
obracaniu przykład kostki:
rec
view modelOrientation
modelOrientation <- foldDyn update initialOrientation tick
Od przykład wycieczki rycerskiej:
rec
startEvent <- view width height rowCount colCount board tour
tour <- foldDyn (update board) [] $ leftmost [startEvent, advanceEvent]
Najłatwiejszy sposób na rozpoczęcie odruchu polega na sklonowaniu reflex-platform github repository i uruchomieniu skryptu try-refleksu zawartego w tym repozytorium - dokładnie tak, jak podano w readme dla platformy Reflex
Przykład wypełnienia kołowego wymaga circle-packing package. Obracający się przykład kostki 3D wymaga matrix package. Aby umożliwić korzystanie z tych pakietów, umieść je w packages.nix na platformie reflex przed uruchomieniem try-reflex - ponownie, zgodnie z opisem w readme platformy reflex.
Chciałbym poznać wspaniałą odpowiedź na to ... – Libby
@Bibby, a co powiesz na pytanie w górę? :) może wtedy przyciągnąć więcej uwagi. – Daniel
zrobione :) Myśląc więcej o tym pytaniu, odpowiedzią jest prawdopodobnie Wiąz - nawet jeśli Wiąz nie jest Haskellem, jest wystarczająco blisko, że można się od niego wiele nauczyć i jest w zasadzie stworzony do użycia w taki sposób, o jakim mówisz . – Libby