- 1
- 2
- 3
- 4
- 5
- 6
import qualified Data.ByteString.Lazy.Char8 as BS
readLineOfInts :: BS.ByteString -> [Int]
readLineOfInts str = case BS.readInt str of
Nothing -> []
Just (i, rest) -> i : if BS.null rest then [] else readLineOfInts (BS.tail rest)
ну и map read . words -- это как раз-таки небезопасное говно
То ли дело PHP std::cin.
я бы захуячил парсер интов на продолжениях, к примеру, чтобы можно было разбивать инпут на чанки и потом скормить всё Олегу
ф-ция, преобразующая поток байтов (разбитый на чанки в виде байтстрингов) в поток произвольной хуиты, определяемый парсером p
в данном случае в качестве Олега выступает Габриэль
composable, leak-free, const mem*
*при условии, что размер типа b фиксирован
Кто все эти люди?
а Габриэль написал pipes
олег за всё берётся смело
всё превращается в говно
а если за говно берётся
то просто тратит меньше сил
Отмстить неразумным хозарам,
Их байты и стринги за буйный набег
Обрек он мечам и пожарам;
Широко известные в узких кругах личности.
Олег Киселёв - учёный, исследователь, уже лет 20 выносит всем мозг ФП, вот сайт со статьями http://okmij.org/ftp/
Габриель - Gabriel Gonzalez - ведёт http://www.haskellforall.com/, один из самых вменяемых блогов по Хаски, работает в птиччере.
скандалы, интриги: оказывается он ещё и SJW
У Олега есть статья, описывающая подход к обработке потоков данных http://okmij.org/ftp/Streams.html
Вкратце - это что-то вроде функциональных Boost.IOStreams - источники, приёмники, фильтры. Цель - сделать так, чтобы ленивое IO не текло ресурсами как сито.
Желание людей иметь такую штуку настолько велико, что есть несколько независимых реализаций, различающихся во многих деталях.
В частности, у Габриэля есть библиотека pipes, которая стремиться к теоретической красоте, у Michael (автор фрэймворка Yesod) - conduits, цель которого - чтобы всё работало.
По сути же это всё обычные корутины, которые можно склеивать друг с другом с проверкой типов.
Т.е. скармливать Олегу - проталкивать по каналам от источника в приёмники, "в качестве Олега выступает Габриэль" - реализация использует pipes соответствующего автора.
** Предложение не является публичной афертой
> скормить всё Олегу
А, ты про iteratees, так бы и сказал
Ну и для контеста многовато писанины.
не совсем, я в принципе про любую библиотеку из этого семейства