2016-12-03 12 views
6

Я понимаю "." (точка) как функция композиции. Я понимаю «|» (труба) как «или», синтаксис введения охраны (от here), но I saw an answer on http-conduits using ".|", который использует этот оператор таким образом, который я не понимаю.Что такое точечная трубка ". |" оператора в Хаскелле?

Другие ссылки для трубопроводов, которые я нашел, такие как:

... предложить синтаксис, как "$$", "$ =", " = $ = "," = $ "для объединения каналов в потоках данных.

Что я должен назвать этим?. | этот оператор и как он работает?

Как и следовало ожидать, поисковая оптимизация для «. Haskell» или «dot pipe» haskell »или« dot pipe »haskell operator conduits« была не очень успешной.

ответ

9

Это только новый (новый) синтаксис, который использует conduit для слияния. Об этом недавно написал об этом blog-post. Цитата из поста, он предложил (и в конце концов сделал это), чтобы

Заменить $=, =$ и =$= операторов - которые все синонимы каждого другого - с оператором .|. Это заимствует интуицию из оболочки Unix , где оператор трубы обозначает данные о трубопроводах от одного процесса до . Аналогия действительно хорошо подходит для кабелепровода, так почему бы не занять ? (Мы называем все эти операторы «фьюжн».)

Как и в сторону, если вы когда-нибудь нужно будет искать операторы, Hayoo и Hoogle являются места, чтобы идти. Существует также Stackage Hoogle (спасибо @duplode), который позволяет вам искать операторов для конкретных резольверов (что особенно полезно здесь, так как это недавнее изменение).

+3

[Stackage Hoogle] (https://www.stackage.org/lts-7.11/hoogle?q=.%7C) также является прекрасным вариантом - по умолчанию используется более широкий набор пакетов, чем haskell.org один. – duplode

+1

Спасибо, @Alec. Если вы продолжите побаловать меня, я предлагаю, чтобы мы продолжали их до тех пор, пока наши сеансы Q & A stackoverflow не преодолели все устаревшие и устаревшие синтаксисы и стратегии в более старых версиях и реализациях, доступных в других местах в Интернете, и они станут главными хитами, чтобы направить людей канонически правильная документация.:) – Mittenchops

+0

похоже, что им лучше позвонить оператору «труба»:/ – jberryman

1

.| представлено библиотекой Conduit и является синонимом fuse.

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

fuse используется для состава conduit сек точно так же, как . оператор используется для композиции функций. Наконец, .| - это новый синтаксис для замены $=, =$ и =$=, которые в любом случае были синонимами.