2013-04-11 12 views
17

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?

+0

Co masz na myśli, mówiąc o wersji "standardowej"? – Adrian

+0

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

+0

Mam na myśli 'Statet s Tożsamość a' kontra 'Stan s a' Obie są takie same funkcjonalnie, prawda? –

Odpowiedz

30

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.

+5

Całkowicie zgadzam się z celami nauczania. Może powinniśmy ustawić pakiet 'monads-teach' zawierający oryginalne prostsze wersje. –

11

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.

Powiązane problemy