Source file Signal.ml

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
type 'a t =
  | Data of 'a
  | EndOfSignal

let pure (value : 'a) : 'a t = Data value

let empty () : 'a t = EndOfSignal

let default default_value = function
  | Data value -> value
  | EndOfSignal -> default_value

let satisfies f = function
  | Data value -> f value
  | EndOfSignal -> false

let map (f : 'a -> 'b) (ma : 'a t) : 'b t =
  match ma with
  | Data value -> Data (f value)
  | EndOfSignal -> EndOfSignal

let filter (f : 'a -> bool) (ma : 'a t) : 'a t =
  match ma with
  | Data value when f value -> Data value
  | Data _ | EndOfSignal -> EndOfSignal

let fold (f : 'a -> 'b -> 'a) (init : 'a) (ma : 'b t) : 'a =
  match ma with
  | Data value -> f init value
  | EndOfSignal -> init

let from_option = function
  | Some value -> Data value
  | None -> EndOfSignal

let to_option = function
  | Data value -> Some value
  | EndOfSignal -> None