2015-05-16 14 views
8

Pewnego dnia natknąłem się na operatora, -<, pojawiającego się w kontekście wiązania wartości do zmiennej w monadzie; w szczególności wygląda na to, że przekazuje wartość do funkcji, która jest następnie przypisywana (i ewentualnie oceniana?) do zmiennej istniejącej w zakresie monady.Co do cholery jest "- <", w każdym razie?

Przykład użycia:

myMonad = do 
    myVar <- f -< x 

Kilka pytań na ten temat: Po pierwsze, co to nazywa? Sam operator jest nieobsługiwalny (Google nie podoba się < ani >), a jedyne znalezione przeze mnie "arrow application" zwykle zawiera link do the other kind of Arrow present in Haskell, który wydaje się niezwiązany z żadną relacją.

Po drugie, dlaczego ten operator nie jest wyjaśniony w większości dostępnych zasobów edukacyjnych? Ani "Delikatne wprowadzenie do monad", ani LYAH nie wspominają o tym tak dobrze, jak tylko przytoczona wzmianka, a większość list operatorów Haskella również to zlekceważy. (Czy jest to uważane za złą praktykę?)

Wreszcie, czy to jest odpowiednik nawiasów, jak w, (myVar <- f -< x) == (myVar <- (f x))? A może bardziej przypomina korzystanie z let myVar = (f x)? W obu przypadkach, jeśli tak to jest używane, po co używać -< nad parens lub $?

+1

podczas wyszukiwania symboli, [hoogle] (https://www.haskell.org/hoogle/?hoogle=-%3C) i [hayoo] (http://hayoo.fh-wedel.de/?query = -% 3C) to twoi przyjaciele. – rampion

Odpowiedz

16

Tak, to jest ten sam rodzaj strzały. Istnieje składnia cukru dla strzałek, podobnie jak w przypadku monad ma składnię cukru. Nie możesz używać Google do wyszukiwania -<, ale możesz użyć numeru Hoogle.

Zobacz: GHC Language Features, Arrow tutorial.

Składnia strzałek jest rzeczywiście słabo udokumentowana. Powodem, dla którego nie można użyć $ zamiast -< jest to, że -< wprowadza czystą wartość do strzałki, ale -> jest tylko jednym przykładem strzałki. Tak więc, $ działa dobrze, jeśli twoja strzałka to ->. Istnieją również monadyczne strzałki (konstruktor Kleisli tworzy je) i można tworzyć własne strzałki, w takich przypadkach -< jest inny.

Powiązane problemy