jestem Pierwsze kroki z Netwire wersji 5.Pierwsze wejście do programów Netwire
nie mam problemu piśmie wszystkie przewody, które chcę przekształcić moje wejść do mojego wyjścia.
Teraz nadszedł czas, aby napisać opakowanie IO, aby powiązać moje wejścia do świata rzeczywistego i jestem nieco zdezorientowany.
Czy mam utworzyć niestandardowy typ sesji dla parametru s
z Wire s e m a b
i osadzić tam moje wartości czujników?
Jeśli tak, to mam następujące pytania:
- Co się dzieje z kontekstem
class (Monoid s, Real t) => HasTime t s | s -> t
Monoid s
? Do czego jest to używane? - Myślałem o sczepianiu na
Map String Double
z moimi odczytami z czujników, ale jak mam monofoniczny skrupułować słowniki? Czy powinien być lewostronny? Zgadza się? Żadne z powyższych?
Jeśli nie, co mam zrobić? Chcę kończyć się przewodami w postaci Wire s InhibitionReason Identity() Double
dla niektórych s
, reprezentujących moje wejście.
Rozumiem, że nie chcę ani nie potrzebuję używać monadycznego parametru m
z Wire
w tym celu, pozwalając, aby same przewody były czyste i ograniczając IO do kodu przechodzącego przez przewód najwyższego poziomu (s). Czy to jest nieprawidłowe?
Jest monoid instancja na mapie, co pozostało stronniczy. I pomyślałbym, że monadyczny kontekst tutaj monada czytająca i wypychanie informacji o czujniku jest rozsądne. To naprawdę nie ma wpływu na miejsce, w którym podnosisz przewody, ponieważ możesz po prostu "runReader" (lub "runReaderT", jeśli chcesz spakować jeszcze więcej rzeczy). – Cubic
Samouczki/przykłady sugerują użycie operacji IO w przewodach wewnętrznych w celu uzyskania danych z czujnika. na przykład użyj 'mkGen_' z' getKey' w nim. Byłbym zainteresowany uogólnieniem tego pytania: "Jakie są zalety i wady dopuszczenia operacji IO wewnątrz przewodów, w porównaniu do podawania wszystkich danych IO jako danych wejściowych do zewnętrznego przewodu?" – crosser