package forester

  1. Overview
  2. Docs
A tool for tending mathematical forests

Install

Dune Dependency

Authors

Maintainers

Sources

4.1.0.tar.gz
md5=576a2fe0666a6bd9fbbf9a567c0aee79
sha512=af7666a0bcd8fb20497a8c0a0bc01cb57db0bde07d68952e40d37464efe81c3a3c8207a5e5dc88264a5f67b5815874e88f3aa31972dd5f0413d44f97e11b758e

doc/src/forester.prelude/Printer_kit.ml.html

Source file Printer_kit.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
module type S0 =
sig
  type out
  val text : string -> out -> unit
end

module type S =
sig
  include S0
  type t = out -> unit

  val nil : t
  val iter : ?sep:t -> ('a -> t) -> 'a list -> t
  val option : ('a -> t) -> 'a option -> t
  val seq : ?sep:t -> t list -> t

  val trimmedText : string -> t
  val space : t
end

module Kit (P : S0) : S with type out = P.out =
struct
  include P

  type t = out -> unit
  let nil : t = fun _ -> ()

  let iter ?(sep = nil) printer xs : t =
    fun fmt ->
    let n = List.length xs in
    xs |> List.iteri @@ fun i x ->
    if not (i = 0 || i = n) then
      sep fmt;
    printer x fmt

  let option printer =
    function
    | None -> nil
    | Some x -> printer x

  let seq ?(sep = nil) ps : t =
    iter ~sep Fun.id ps


  let trimmedText (txt : string) : t =
    let txt = String.trim txt in
    if String.length txt > 0 then
      text @@ txt
    else
      nil

  let space = text " "
end
OCaml

Innovation. Community. Security.