Мне интересно узнать, как эффективно отправлять данные между Haskell программами, используя стандартный ввод и вывод. Предположим, я хочу передать две программы вместе: «P1» выводит число 5 в стандартный вывод, а «P2» берет целое число из стандартного ввода, добавляет 1 и снова выводит его в стандартный вывод. Прямо сейчас лучший способ, которым я знаю, состоит в том, чтобы вывести данные в виде текста из P1, проанализировать этот текст обратно в целое число в P2 и продолжить оттуда. Например:
P1.hs:
module Main where
main = do
print 5
P2.hs:
module Main where
main = fmap manipulateData getLine >>= print
where
manipulateData = (+ 1) . (read :: String -> Int)
Вывод:
$ (stack exec p1) | (stack exec p2)
6
Я бы хотел использовать стандартный ввод / вывод для отправки целого числа, не рассматривая его как текст, если это возможно. Я предполагаю, что это все еще требует некоторого анализа, чтобы работать, но я надеюсь, что возможно проанализировать данные как двоичные и получить более быструю программу.
Есть ли у Haskell какой-либо способ сделать это простым ? Поскольку я снова перехожу от одного базового Haskell типа данных (Int) к тому же типу со стандартным вводом-выводом в середине, мне интересно, есть ли простое решение, которое не требует написания собственного двоичного файла парсер (чего я не знаю как сделать). Кто-нибудь может предоставить такой метод?