package batteries

  1. Overview
  2. Docs
A community-maintained standard library extension

Install

Dune Dependency

Authors

Maintainers

Sources

v3.9.0.tar.gz
md5=ea26b5c72e6731e59d856626049cca4d
sha512=55975b62c26f6db77433a3ac31f97af609fc6789bb62ac38b267249c78fd44ff37fe81901f1cf560857b9493a6046dd37b0d1c0234c66bd59e52843aac3ce6cb

doc/batteries.unthreaded/BatStream/index.html

Module BatStreamSource

Streams and stream parsers

Streams are a read-and-forget data structure, comparable to enumerations. In Batteries Included, streams are deprecated in favor of enumerations, defined in module BatEnum.

Note This module is provided essentially for backwards-compatibility. If you feel like using Stream.t, please take a look at BatEnum or LazyList.

This module is based on Zheng Li's SDFlow

This module replaces Stdlib's Stream module.

  • author Zheng Li (SDFlow)
  • author David Teller

@documents Stream

Sourcetype 'a t = 'a Stream.t
include BatEnum.Enumerable with type 'a enumerable = 'a t
Sourcetype 'a enumerable = 'a t

The data structure, e.g. 'a List.t

include BatInterfaces.Mappable with type 'a mappable = 'a t
Sourcetype 'a mappable = 'a t

The data structure, e.g. 'a List.t

The type of streams holding values of type 'a.

Sourceexception Failure

Raised by parsers when none of the first components of the stream patterns is accepted.

Sourceexception Error of string

Raised by parsers when the first component of a stream pattern is accepted, but one of the following components is rejected.

Stream builders

Sourceval from : (int -> 'a option) -> 'a t

Stream.from f returns a stream built from the function f. To create a new stream element, the function f is called with the current stream count. The user function f must return either Some <value> for a value or None to specify the end of the stream.

Sourceval of_list : 'a list -> 'a t

Return the stream holding the elements of the list in the same order.

Sourceval of_string : string -> char t

Return the stream of the characters of the string parameter.

Sourceval of_bytes : Bytes.t -> char t

Return the stream of the characters of the bytes parameter.

  • since 2.3.0
Sourceval of_channel : in_channel -> char t

Return the stream of the characters read from the input channel.

Other Stream builders

Warning: these functions create streams with fast access; it is illegal to mix them with streams built with [< >]; would raise Failure when accessing such mixed streams.

Sourceval of_fun : (unit -> 'a) -> 'a t

Stream.of_fun f returns a stream built from the function f. To create a new stream element, the function f is called with the current stream count. The user function f must return either Some <value> for a value or None to specify the end of the stream.

Stream iterator

Sourceval iter : ('a -> unit) -> 'a t -> unit

Stream.iter f s scans the whole stream s, applying function f in turn to each stream element encountered.

Sourceval foldl : ('a -> 'b -> 'a * bool option) -> 'a -> 'b t -> 'a

foldl f init stream is a lazy fold_left. f accu elt should return (new_accu, state) where new_accu is normal accumulation result, and state is a flag representing whether the computation should continue and whether the last operation is valid: None means continue, Some b means stop where b = true means the last addition is still valid and b = false means the last addition is invalid and should be revert.

Sourceval foldr : ('a -> 'b lazy_t -> 'b) -> 'b -> 'a t -> 'b

foldr f init stream is a lazy fold_right. Unlike the normal fold_right, the accumulation parameter of f elt accu is lazy, hence it can decide not to force the evaluation of accu if the current element elt can determine the result by itself.

Sourceval fold : ('a -> 'a -> 'a * bool option) -> 'a t -> 'a

fold is foldl without initialization value, where the first element of stream is taken as init. It raises End_of_stream exception when the input stream is empty.

Sourceval filter : ('a -> bool) -> 'a t -> 'a t

filter test stream picks all the elements satisfying test from stream and return the results in the same order as a stream.

Predefined parsers

Sourceval empty : 'a t -> unit

Return () if the stream is empty, else raise Stream.Failure.

Useful functions

Sourceval peek : 'a t -> 'a option

Return Some of "the first element" of the stream, or None if the stream is empty.

Sourceval junk : 'a t -> unit

Remove the first element of the stream, possibly unfreezing it before.

Sourceval count : 'a t -> int

Return the current count of the stream elements, i.e. the number of the stream elements discarded.

Sourceval npeek : int -> 'a t -> 'a list

npeek n returns the list of the n first elements of the stream, or all its remaining elements if less than n elements are available.

Conversion functions

Sourceval enum : 'a t -> 'a BatEnum.t

Convert a stream to an enumeration. Reading the resulting enumeration will consume elements from the stream. This is the preferred manner of converting from a stream to any other data structure.

Sourceval of_enum : 'a BatEnum.t -> 'a t

Convert an enumeration to a stream. Reading the resulting stream will consume elements from the enumeration. This is the preferred manner of creating a stream.

Sourceval of_input : BatIO.input -> char t

Convert an input to a stream.

Sourceval to_list : 'a t -> 'a list

Convert a stream to a list

Sourceval to_string : char t -> string

convert stream of chars to string, using buffer

Sourceval to_string_fmt : ('a -> string, unit, string) format -> 'a t -> string

convert stream to string, using Printf with given format

Sourceval to_string_fun : ('a -> string) -> 'a t -> string

convert stream to string, using given conversion function

Stream consumers

Sourceval on_output : 'a BatIO.output -> char t -> unit

Convert an output to a stream.

Computation over stream

All the functions in this part are lazy.

Sourceval map : ('a -> 'b) -> 'a t -> 'b t

map f stream applies f in turn to elements from stream and return the results as a stream in the same order.

Sourceval map2 : ('a -> 'b -> 'c) -> 'a t -> 'b t -> 'c t

map2 f streama streamb applies f in turn to elements of corresponding positions from streama and streamb. The results are constructed in the same order as a stream. If one stream is short, excess elements of the longer stream are ignored.

Sourceval scanl : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'a t

scanl f init stream returns a stream of successive reduced values from the left: scanl f init [< 'e0; 'e1; ... >] is equivalent to [< 'init; '(f init e0); '(f (f init e0) e1); ... >]

Sourceval scan : ('a -> 'a -> 'a) -> 'a t -> 'a t

scan is similar to scanl but without the init value: scanl f init [< 'e0; 'e1; 'e2; ... >] is equivalent to [< 'e0; '(f e0 e1); '(f (f e0 e1) e2); ... >]

Sourceval concat : 'a t t -> 'a t

concatenate a stream of streams

Sourceval concat_map : ('a -> 'b t) -> 'a t -> 'b t

Composition of concat and map. concat_map f e is the same as concat (map f e).

  • since 2.3.0
Sourceval take : int -> 'a t -> 'a t

take n stream returns the prefix of stream of length n, or stream itself if n is greater than the length of stream

Sourceval drop : int -> 'a t -> 'a t

drop n stream returns the suffix of stream after the first n elements, or a empty stream if n is greater than the length of stream

Sourceval take_while : ('a -> bool) -> 'a t -> 'a t

take_while test stream returns the longest (possibly empty) prefix of stream of elements that satisfy test.

Sourceval drop_while : ('a -> bool) -> 'a t -> 'a t

drop_while test stream returns the remaining suffix of take_while test stream.

Streams pair arithmetic

All the functions in this part are lazy.

Sourceval dup : 'a t -> 'a t * 'a t

dup stream returns a pair of streams which are identical to stream. Note that stream is a destructive data structure, the point of dup is to return two streams can be used independently.

NOT IMPLEMENTED CORRECTLY - WILL RAISE Failure UNTIL CORRECT IMPLEMENTATION FOUND

Sourceval comb : ('a t * 'b t) -> ('a * 'b) t

comb transform a pair of stream into a stream of pairs of corresponding elements. If one stream is short, excess elements of the longer stream are ignored.

Sourceval split : ('a * 'b) t -> 'a t * 'b t

split is the opposite of comb

Sourceval merge : (bool -> 'a -> bool) -> ('a t * 'a t) -> 'a t

merge test (streama, streamb) merge the elements from streama and streamb into a single stream. The bool type here represents the id of the two input streams where true is the first and false represents the second. The test function is applied to each element of the output stream together with the id of the input stream from which it was extracted, to decide which stream should the next element come from. The first element is always taken from streama. When a stream runs out of elements, the merge process will continue to take elements from the other stream until both streams reach their ends.

Sourceval switch : ('a -> bool) -> 'a t -> 'a t * 'a t

switch test stream split stream into two streams, where the first stream have all the elements satisfying test, the second stream is opposite. The order of elements in the source stream is preserved.

Stream arithmetic

All the functions in this part are lazy.

Sourceval cons : 'a -> 'a t -> 'a t

cons x stream equals [<'x; stream>].

Sourceval apnd : 'a t -> 'a t -> 'a t

apnd fla flb equals [<fla;flb>].

Sourceval is_empty : 'a t -> bool

is_empty stream tests whether stream is empty. But note that it forces the evaluation of the head element if any.

Predefined parsers

Sourceval next : 'a t -> 'a

Return the first element of the stream and remove it from the stream.

Sourcemodule StreamLabels : sig ... end

Note This module is provided essentially for backwards-compatibility. If you feel like using Stream.t, please take a look at BatEnum or LazyList and GenParser.

OCaml

Innovation. Community. Security.