Jaki jest sens używania transformatora Monad z Monadą tożsamości zamiast używania "standardowej" wersji transformatora?Monadowe transformatory z monadą tożsamości
Czy jest bardziej elastyczny?
Jaki jest sens używania transformatora Monad z Monadą tożsamości zamiast używania "standardowej" wersji transformatora?Monadowe transformatory z monadą tożsamości
Czy jest bardziej elastyczny?
Powrót w mtl
1,0 mieliśmy zarówno
newtype State s a = State { runState :: s -> (a, s) }
i
newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }
to jednak oznaczało kogoś, kto miał do wdrożenia wystąpień rzeczy jak MonadState
likwidacji powielania wysiłków.
W transformers
(i istniejącej już monads-fd
i monads-tf
) Ross Paterson postanowił wykorzystać prostsze podejście tylko oferując ostatniego, stosując Identity
jako monadzie bazowej.
Doprowadziło to do zmniejszenia nakładu pracy przy utrzymywaniu mtl
i usunęło fakt, że istniały dwa różne sposoby realizacji monady State
. Zrobiło to jednak trudniejsze do nauczenia elementy z mtl
, ponieważ musisz zrozumieć wersje transformers
tuż za bramą i nie dostać uproszczonej wersji jako kół treningowych.
Kiedy stary mtl
został wycofany i monads-fd
stał mtl
2.0, za pomocą istniejącego transformers
decyzja ta konstrukcja została przeniesiona.
Ja osobiście lubiłem mieć oddzielne proste monady do celów pedagogicznych, ale po drugiej stronie debaty było znacznie więcej osób.
Całkowicie zgadzam się z celami nauczania. Może powinniśmy ustawić pakiet 'monads-teach' zawierający oryginalne prostsze wersje. –
Z dokumentacji: Nie ma powodu, aby korzystać z monady tożsamości zamiast prostszej czynności polegającej na prostym zastosowaniu funkcji do ich argumentów. Celem monady tożsamości jest jej fundamentalna rola w teorii transformatorów monadowych. Każdy transformator monadowy zastosowany do monady Identity daje wersję tej monady bez transformatora.
Jak rozumiem, uzyskanie monady z transformatora monady przez zastosowanie monady tożsamości jest dokładnie tym, za czym stoi monada tożsamości. Nie ma żadnej przewagi nad używaniem monady bez transformatora, ale czasami trzeba użyć transformatora monad, np. kiedy funkcja, której chcesz użyć, wymaga tego.
Co masz na myśli, mówiąc o wersji "standardowej"? – Adrian
Co masz na myśli mówiąc o "standardowej" wersji transformatora? Zwykle jest to standardowa wersja transformatora zastosowana do monady tożsamości. – leftaroundabout
Mam na myśli 'Statet s Tożsamość a' kontra 'Stan s a' Obie są takie same funkcjonalnie, prawda? –