Zmieniam kod, który działał wewnątrz monady StateT
, aby działał wewnątrz StateP
z Control.Proxy
. Jednak część mojego kodu (na przykład operator %=
z Control.Lens
) wymaga instancji MonadState
. Czy jest to dla mnie bezpieczne/poprawne, aby dodać taką instancję? Wygląda to jak coś, co jest poprawnie obsługiwane przez bibliotekę (w tym przypadku: Control.Proxy
).Czy mogę ustawić StateP z Control.Proxy jako instancję MonadState?
5
A
Odpowiedz
4
Tak, to jest bezpieczne. Instancja chcesz to:
instance (Monad m, Proxy p) => MonadState s (PS.StateP s p a' a b' b m) where
get = PS.get
put = PS.put
Chcę tylko krótko zauważyć, że w pipes-4.0.0
(który jest na Github) transformatory proxy nie są już konieczne, a te same rozszerzenia są zlecane monada transformatorów w monady bazowej. Oznacza to, że zamiast:
Consumer (StateP s p) a m r
... użyłbyś:
Consumer a (StateT s m) r
Oznacza to, że można to po prostu być w stanie napisać:
lift $ myLens %= f
Ja jednak nadal plan na dodawanie instancji MonadState
dla Proxy
tak, choć może w osobnym pakiecie (nadal nie zdecydowałem, czy włączyć je do głównej biblioteki). Wyglądają tak:
instance (MonadState s m) => MonadState s (Proxy a' a b' b m r) where
put s = lift (put s)
get = lift get
Powiązane problemy
- 1. MonadState wystąpienie z Real World Haskell nie kompiluje
- 2. Powód pobierania i wkładania MonadState?
- 3. Utwórz nową instancję typu podanego jako parametr
- 4. Jak ustawić/utworzyć instancję klasy Generics?
- 5. Czy mogę mieć więcej niż 1 instancję "mongos"?
- 6. Czy mogę zabronić wywoływania metod statycznych na instancję obiektu?
- 7. Dlaczego warto używać MultiParamTypeClasses w MonadState?
- 8. ustawić tło jako NULL
- 9. Czy mogę ustawić domyślną wartość pola EntityProxy?
- 10. Czy mogę ustawić wartość TTL dla @Cacheable?
- 11. Czy mogę ustawić android: layout_toLeftOf programowo?
- 12. Czy mogę ustawić ignore_dup_key na klucz podstawowy?
- 13. Jak mogę udekorować instancję klasy wywoływalnej?
- 14. Jak mogę uruchomić aplikację jako "Uruchom jako administrator" z mocą?
- 15. Jak ustawić "," jako separator dziesiętny z R
- 16. Jak zwrócić instancję z Enum?
- 17. Czy mogę ustawić rubinową ścieżkę Vima?
- 18. Czy mogę ustawić właściwości przejściowe do pobrania?
- 19. Jak mogę uruchomić instancję kontynuacji zadania?
- 20. Czy mogę ustawić zadanie Powershell z niskim priorytetem?
- 21. Czy mogę ustawić atrybuty kolumn dla tabeli z partycjami kdb?
- 22. Jak mogę ustawić arbitralny bufor Emacsa jako "ukryty"?
- 23. Czy PHP może utworzyć instancję obiektu z nazwy klasy jako ciąg?
- 24. Jak ustawić prywatną instancję zmienną używaną w teście metody?
- 25. Czy mogę używać listy obiektów jako słowników?
- 26. Czy mogę używać NetBeans z asp.net jako edytorem?
- 27. Czy mogę zadeklarować słownik z dynamiczną tablicą jako typ wartości?
- 28. Czy mogę wysłać klasę jako dodatkową z zamiarem?
- 29. W Androidzie XML, czy mogę ustawić dla stylu niestandardowego przycisk ButtonStyleSmall lub Button.Small jako styl nadrzędny?
- 30. Czy mogę używać Video.JS jako odtwarzacza audio?
wielkie dzięki! jednak wydaje się to nie do końca poprawne - pojawia się następujący błąd: – ajp
'Miły brak dopasowania Drugi argument" MonadState "powinien mieć rodzaj" * -> * ", , ale" Proxy a 'ab' bmr " ma rodzaj '*' W deklaracji instancji dla 'MonadState s (Proxy a' ab 'bmr)' ' – ajp
usunięcie' r' z typu Proxy powoduje naprawienie tego rodzaju, ale następnie daje inny o niedozwolonej deklaracji instancji – ajp