Module Sdflow


module Sdflow: sig .. end
Structured DataFlow, a high-level combinatory dataflow programming library based upon destructive lazy streams. The base type flow is compatible with Stream.t of standard OCaml.

Unless specified, all the flow manipulation functions are lazy by default.


type 'a flow = 'a Stream.t 
exception End_of_flow
End_of_flow = Stream.Failure

Conversion interfaces

Almost identical to Stream's interface function.

val of_fun : (unit -> 'a) -> 'a flow
val of_list : 'a list -> 'a flow
val of_string : string -> char flow
val of_channel : Pervasives.in_channel -> char flow
val to_fun : 'a flow -> unit -> 'a
val to_list : 'a flow -> 'a list
val to_string : char flow -> string
val to_channel : Pervasives.out_channel -> char flow -> unit
val seq : 'a -> ('a -> 'a) -> ('a -> bool) -> 'a flow
val enum : ?fin:int -> int -> int flow
val (--) : int -> int -> int flow
val repeat : ?times:int -> 'a -> 'a flow
val cycle : ?times:int -> 'a flow -> 'a flow
val peek : 'a flow -> 'a option
val next : 'a flow -> 'a
val iter : ('a -> unit) -> 'a flow -> unit
val foldl : ('a -> 'b -> 'a * bool option) -> 'a -> 'b flow -> 'a
val foldr : ('a -> 'b lazy_t -> 'b) -> 'b -> 'a flow -> 'b
val fold : ('a -> 'a -> 'a * bool option) -> 'a flow -> 'a
val cons : 'a -> 'a flow -> 'a flow
val apnd : 'a flow -> 'a flow -> 'a flow
val is_empty : 'a flow -> bool
val filter : ('a -> bool) -> 'a flow -> 'a flow
val concat : 'a flow flow -> 'a flow
val take : int -> 'a flow -> 'a flow
val drop : int -> 'a flow -> 'a flow
val take_while : ('a -> bool) -> 'a flow -> 'a flow
val drop_while : ('a -> bool) -> 'a flow -> 'a flow
val span : ('a -> bool) -> 'a flow -> 'a flow * 'a flow
val break : ('a -> bool) -> 'a flow -> 'a flow * 'a flow
val group : ('a -> bool) -> 'a flow -> 'a flow flow
val dup : 'a flow -> 'a flow * 'a flow
val comb : 'a flow * 'b flow -> ('a * 'b) flow
val split : ('a * 'b) flow -> 'a flow * 'b flow
val merge : (bool -> 'a -> bool) -> 'a flow * 'a flow -> 'a flow
val switch : ('a -> bool) -> 'a flow -> 'a flow * 'a flow
val dupn : int -> 'a flow -> 'a flow array
val combn : 'a flow array -> 'a array flow
val splitn : int -> 'a array flow -> 'a flow array
val mergen : (int -> 'a -> int) -> 'a flow array -> 'a flow
val switchn : int -> ('a -> int) -> 'a flow -> 'a flow array
val map : ('a -> 'b) -> 'a flow -> 'b flow
val map2 : ('a -> 'b -> 'c) -> 'a flow -> 'b flow -> 'c flow
val scanl : ('a -> 'b -> 'a) -> 'a -> 'b flow -> 'a flow
val scan : ('a -> 'a -> 'a) -> 'a flow -> 'a flow
val map_fold : ('a -> 'a -> 'a * bool option) -> 'a flow -> 'a flow
val feedl : 'a flow -> ('a flow -> 'a flow * 'b) -> 'b
val feedr : 'a flow -> ('a flow -> 'b * 'a flow) -> 'b
val circ : 'a flow -> ('a flow -> 'a flow) -> 'a flow
val (|||) : ('a flow -> 'b flow) ->
('b flow -> 'c flow) -> 'a flow -> 'c flow
val while_do : ?size:int ->
('a -> bool) ->
('a flow -> 'a flow) -> 'a flow -> 'a flow
val do_while : ?size:int ->
('a -> bool) ->
('a flow -> 'a flow) -> 'a flow -> 'a flow
val farm : ?par:int ->
?size:(int -> int) ->
?path:('a -> int) ->
(int -> 'a flow -> 'b flow) -> 'a flow -> 'b flow
val (|>) : 'a -> ('a -> 'b) -> 'b
val (@.) : ('a -> 'b) -> 'a -> 'b
val (|-) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
val (-|) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
val (//) : ('a -> 'b) -> ('c -> 'd) -> 'a * 'c -> 'b * 'd
val curry : ('a * 'b -> 'c) -> 'a -> 'b -> 'c
val uncurry : ('a -> 'b -> 'c) -> 'a * 'b -> 'c
val id : 'a -> 'a