2016-12-03 28 views
6

Rozumiem "." (kropka) jako skład funkcji. Rozumiem "|" (pipe) jako "lub", składnia wprowadzająca straży (od here), ale I saw an answer on http-conduits using ".|", która używa tego operatora w sposób, którego nie rozumiem.Co to jest rurka kropkowa ". |" operator w Haskell?

Pozostałe odnośniki do rur znalazłem, takie jak:

... sugerują składni "$$", "$ =" " = $ = "," = $ "do łączenia przewodów w przepływie danych.

Co powinienem nazwać ". |" ten operator i jak to działa?

Przewidywalnie, szukanie w sieci dla ".mashkell" lub "" dot-rurki "haskell" lub "" dot-pipetowych "kanałów operatorskich" nie było zbyt udane.

Odpowiedz

9

To jest tylko (nowa) nowa składnia, którą conduit używa do fuzji. Autor napisał niedawno o tym blog-post. Cytując ze stanowiska, zaproponował (i ostatecznie to zrobił) do

Wymień $=, =$ i =$= operatorów - które są synonimami każdego drugiej - z operatorem .|. To zapożycza intuicję z powłoki Unix , gdzie operator rurki oznacza dane rurociągów z jednego procesu do innego: . Ta analogia ma naprawdę dobre znaczenie dla kanału, więc dlaczego nie pożyczyć jej? (Wzywamy wszystkich tych podmiotów „Fuzja”).

Tak na marginesie, jeśli kiedykolwiek trzeba spojrzeć w górę i operatorów, HayooHoogle są miejsca do pracy. Istnieje również Stackage Hoogle (dzięki @duplode), który pozwala wyszukać operatorów dla poszczególnych resolverów (co jest szczególnie przydatne tutaj, ponieważ jest to ostatnia zmiana).

+3

[Stackage Hoogle] (https://www.stackage.org/lts-7.11/hoogle?q=.%7C) to także dobra opcja - domyślnie jest to szerszy zakres pakietów niż haskell.org jeden. – duplode

+1

Dzięki, @Alec. Jeśli nadal będziesz mi się podobał, proponuję, abyśmy kontynuowali je, dopóki nasze sesje pytań i odpowiedzi dotyczących stackoverflow nie pokonają wszystkich przestarzałych i przestarzałych składni i strategii w starszych wersjach i implementacjach dostępnych gdzie indziej w Internecie, a te stają się najlepszymi przebojami, aby skierować ludzi do kanonicznej poprawna dokumentacja.:) – Mittenchops

+0

wygląda na to, że lepiej byłoby dzwonić do operatora "rura":/ – jberryman

1

.| została wprowadzona przez bibliotekę Conduit i jest synonimem fuse.

fuse 
    :: Monad m => Conduit a m b -> ConduitM b c m r -> ConduitM a c m r 

fuse służy do składu conduit s sam sposób jak . operatora dla kompozycji funkcji. Wreszcie, .| to nowa składnia do zastąpienia $=, =$ i =$=, które i tak były synonimami.