1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
@BEGIN_FROM_4_07_0@
include Seq
@END_FROM_4_07_0@
@BEGIN_BEFORE_4_07_0@
@BEGIN_WITH_SEQ_PKG@
include Seq
@END_WITH_SEQ_PKG@
@BEGIN_WITHOUT_SEQ_PKG@
type 'a t = unit -> 'a node
and 'a node =
'a Stdcompat__init.seq_node =
| Nil
| Cons of 'a * 'a t
let empty () = Nil
let return x () = Cons (x, empty)
let rec map f seq () = match seq () with
| Nil -> Nil
| Cons (x, next) -> Cons (f x, map f next)
let rec filter_map f seq () = match seq () with
| Nil -> Nil
| Cons (x, next) ->
match f x with
| None -> filter_map f next ()
| Some y -> Cons (y, filter_map f next)
let rec filter f seq () = match seq () with
| Nil -> Nil
| Cons (x, next) ->
if f x
then Cons (x, filter f next)
else filter f next ()
let rec flat_map f seq () = match seq () with
| Nil -> Nil
| Cons (x, next) ->
flat_map_app f (f x) next ()
and flat_map_app f seq tail () = match seq () with
| Nil -> flat_map f tail ()
| Cons (x, next) ->
Cons (x, flat_map_app f next tail)
let fold_left f acc seq =
let rec aux f acc seq = match seq () with
| Nil -> acc
| Cons (x, next) ->
let acc = f acc x in
aux f acc next
in
aux f acc seq
let iter f seq =
let rec aux seq = match seq () with
| Nil -> ()
| Cons (x, next) ->
f x;
aux next
in
aux seq
@END_WITHOUT_SEQ_PKG@
@END_BEFORE_4_07_0@
@BEGIN_BEFORE_4_11_0@
let cons x seq () =
Cons (x, seq)
let rec append a b () =
match a () with
| Nil -> b ()
| Cons (hd, tl) ->
Cons (hd, append tl b)
let rec unfold f state () =
match f state with
| None -> Nil
| Some (value, state) ->
Cons (value, unfold f state)
@END_BEFORE_4_11_0@
|