module CCLinq:sig
..end
CCLinq.(
of_list [1;2;3]
|> flat_map (fun x -> Sequence.(x -- (x+10)))
|> sort ()
|> count ()
|> flat_map PMap.to_seq
|> List.run
);;
- : (int * int) list = [(13, 1); (12, 2); (11, 3); (10, 3); (9, 3);
(8, 3); (7, 3); (6, 3); (5, 3); (4, 3); (3, 3); (2, 2); (1, 1)]
CCLinq.(
IO.slurp_file "/tmp/foo"
|> IO.lines
|> sort ()
|> IO.to_file_lines "/tmp/bar"
);;
- : `Ok ()
DEPRECATED, use "OLinq" (standalone library) instead
status: deprecated
The purpose is to provide powerful combinators to express iteration,
transformation and combination of collections of items. This module depends
on several other modules, including CCList
and CCSequence
.
Functions and operations are assumed to be referentially transparent, i.e.
they should not rely on external side effects, they should not rely on
the order of execution.
type'a
sequence =('a -> unit) -> unit
type'a
equal ='a -> 'a -> bool
type'a
ord ='a -> 'a -> int
type'a
hash ='a -> int
type'a
with_err =[ `Error of string | `Ok of 'a ]
module PMap:sig
..end
type 'a
t
val empty : 'a t
val start : 'a -> 'a t
val return : 'a -> 'a t
val of_list : 'a list -> 'a t
val of_array : 'a array -> 'a t
val of_array_i : 'a array -> (int * 'a) t
val range : int -> int -> int t
range i j
goes from i
up to j
includedval (--) : int -> int -> int t
CCLinq.range
val of_hashtbl : ('a, 'b) Hashtbl.t -> ('a * 'b) t
val of_seq : 'a sequence -> 'a t
val of_queue : 'a Queue.t -> 'a t
val of_stack : 'a Stack.t -> 'a t
val of_string : string -> char t
val run : ?limit:int -> 'a t -> 'a sequence
limit
: max number of values to returnval run1 : 'a t -> 'a
Not_found
if the query succeeds with 0 elementval run_no_optim : ?limit:int -> 'a t -> 'a sequence
val map : ('a -> 'b) -> 'a t -> 'b t
val (>|=) : 'a t -> ('a -> 'b) -> 'b t
CCLinq.map
val filter : ('a -> bool) -> 'a t -> 'a t
val size : 'a t -> int t
size t
returns one value, the number of items returned by t
val choose : 'a t -> 'a t
val filter_map : ('a -> 'b option) -> 'a t -> 'b t
val flat_map : ('a -> 'b sequence) -> 'a t -> 'b t
CCLinq.flat_map
but using sequencesval flat_map_l : ('a -> 'b list) -> 'a t -> 'b t
val flatten : 'a list t -> 'a t
val flatten_seq : 'a sequence t -> 'a t
val take : int -> 'a t -> 'a t
n
elementsval take_while : ('a -> bool) -> 'a t -> 'a t
val sort : ?cmp:'a ord -> unit -> 'a t -> 'a t
val distinct : ?cmp:'a ord -> unit -> 'a t -> 'a t
val group_by : ?cmp:'b ord ->
?eq:'b equal ->
?hash:'b hash ->
('a -> 'b) -> 'a t -> ('b, 'a list) PMap.t t
group_by f
takes a collection c
as input, and returns
a multimap m
such that for each x
in c
,
x
occurs in m
under the key f x
. In other words, f
is used
to obtain a key from x
, and x
is added to the multimap using this key.val group_by' : ?cmp:'b ord ->
?eq:'b equal ->
?hash:'b hash -> ('a -> 'b) -> 'a t -> ('b * 'a list) t
val count : ?cmp:'a ord ->
?eq:'a equal ->
?hash:'a hash ->
unit -> 'a t -> ('a, int) PMap.t t
count c
returns a map from elements of c
to the number
of time those elements occur.val count' : ?cmp:'a ord -> unit -> 'a t -> ('a * int) t
val fold : ('b -> 'a -> 'b) -> 'b -> 'a t -> 'b t
val reduce : ('a -> 'b) -> ('a -> 'b -> 'b) -> ('b -> 'c) -> 'a t -> 'c t
reduce start mix stop q
uses start
on the first element of q
,
and combine the result with following elements using mix
. The final
value is transformed using stop
.val is_empty : 'a t -> bool t
val sum : int t -> int t
val contains : ?eq:'a equal -> 'a -> 'a t -> bool t
val average : int t -> int t
val max : int t -> int t
val min : int t -> int t
val for_all : ('a -> bool) -> 'a t -> bool t
val exists : ('a -> bool) -> 'a t -> bool t
val find : ('a -> bool) -> 'a t -> 'a option t
val find_map : ('a -> 'b option) -> 'a t -> 'b option t
val join : ?cmp:'key ord ->
?eq:'key equal ->
?hash:'key hash ->
('a -> 'key) ->
('b -> 'key) ->
merge:('key -> 'a -> 'b -> 'c option) ->
'a t -> 'b t -> 'c t
join key1 key2 ~merge
is a binary operation
that takes two collections a
and b
, projects their
elements resp. with key1
and key2
, and combine
values (x,y)
from (a,b)
with the same key
using merge
. If merge
returns None
, the combination
of values is discarded.val group_join : ?cmp:'a ord ->
?eq:'a equal ->
?hash:'a hash ->
('b -> 'a) ->
'a t -> 'b t -> ('a, 'b list) PMap.t t
group_join key2
associates to every element x
of
the first collection, all the elements y
of the second
collection such that eq x (key y)
val product : 'a t -> 'b t -> ('a * 'b) t
val append : 'a t -> 'a t -> 'a t
val inter : ?cmp:'a ord ->
?eq:'a equal ->
?hash:'a hash -> unit -> 'a t -> 'a t -> 'a t
val union : ?cmp:'a ord ->
?eq:'a equal ->
?hash:'a hash -> unit -> 'a t -> 'a t -> 'a t
val diff : ?cmp:'a ord ->
?eq:'a equal ->
?hash:'a hash -> unit -> 'a t -> 'a t -> 'a t
val fst : ('a * 'b) t -> 'a t
val snd : ('a * 'b) t -> 'b t
val map1 : ('a -> 'b) -> ('a * 'c) t -> ('b * 'c) t
val map2 : ('a -> 'b) -> ('c * 'a) t -> ('c * 'b) t
val flatten_opt : 'a option t -> 'a t
val pure : 'a -> 'a t
CCLinq.return
val app : ('a -> 'b) t -> 'a t -> 'b t
val (<*>) : ('a -> 'b) t -> 'a t -> 'b t
CCLinq.app
Careful, those operators do not allow any optimization before running the
query, they might therefore be pretty slow.
val bind : ('a -> 'b t) -> 'a t -> 'b t
val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
CCLinq.bind
val lazy_ : 'a lazy_t t -> 'a t
val opt_unwrap : 'a option t -> 'a t
val reflect : 'a t -> 'a sequence t
reflect q
evaluates all values in q
and returns a sequence
of all those values. Also blocks optimizationsmodule Infix:sig
..end
val to_seq : 'a t -> 'a sequence t
val to_hashtbl : ('a * 'b) t -> ('a, 'b) Hashtbl.t t
val to_queue : 'a t -> 'a Queue.t t
val to_stack : 'a t -> 'a Stack.t t
module List:sig
..end
module Array:sig
..end
module AdaptSet(
S
:
Set.S
)
:sig
..end
module AdaptMap(
M
:
Map.S
)
:sig
..end
module IO:sig
..end