2013-01-05 12 views
9

Klasa Monad definiuje >> metody, których sekwencje dwóch jednowartościowy czynności:Dlaczego nie ma << w bibliotece standardowej Haskell?

>> :: Monad m => m a -> m b -> m b 

Operator wiązania >>= ma ekwiwalent odwrót, argument =<<; podobnie jak operatory składni funkcji monadycznych ("ryby") >=> i <=<. Wydaje się jednak, że nie jest to << (po kilku minutach Hoogling). Dlaczego to?

Edytuj: Wiem, że to nic wielkiego. Po prostu podoba mi się sposób, w jaki niektóre linie kodu wyglądają z operatorami lewostronnymi. x <- doSomething =<< doSomethingElse po prostu wygląda ładniej, ze strzałkami wszystko idzie w ten sam sposób, niż x <- doSomethingElse >>= doSomething.

+0

Nikt nie zajął się tą sprawą. –

+0

Nie pomyśleli o tym, kiedy zrobili '= <<' i '<= <"? Nie wiem, dlaczego mi to przeszkadza, to po prostu niedopatrzenie. –

+0

Uh, czy te przykłady robią to samo? – MathematicalOrchid

Odpowiedz

10

Zgodnie z moją wiedzą nie ma dobrego powodu. Zauważ, że twoje Monad powinno być również instancją Applicative, więc możesz użyć <* i *> jako narzędzi do sekwencjonowania.

+0

Dobry pomysł! Dzięki. –

+10

Należy jednak pamiętać, że chociaż '*>' jest równoważne '>>', to a <* b' NIE jest równoważne 'b *> a'. – dave4420

+0

@ dave4420 to dobry punkt. 'flip (*>)' i 'flip (>>)' są jednak zawsze opcją. –

Powiązane problemy