Source file sigs.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


(** {2 Parametrized IO Interface} *)
module type IO = sig
  type 'a t

  val return : 'a -> 'a t
  val failwith : string -> 'a t

  val (let+) : 'a t -> ('a -> 'b) -> 'b t
  val (let*) : 'a t -> ('a -> 'b t) -> 'b t
  val (and+) : 'a t -> 'b t -> ('a * 'b) t

  type in_channel
  type out_channel

  val stdin : in_channel
  val stdout : out_channel

  val read : in_channel -> bytes -> int -> int -> unit t
  val read_line : in_channel -> string t

  val write : out_channel -> bytes -> int -> int -> unit t
  val write_string : out_channel -> string -> unit t

  val spawn : (unit -> unit t) -> unit
  (** Spawn a new task that executes concurrently. *)

  val fail : exn -> unit t
  val catch : (unit -> 'a t) -> (exn -> 'a t) -> 'a t
end