File: fugue.mli

package info (click to toggle)
ocaml-obuild 0.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,456 kB
  • sloc: ml: 14,491; sh: 211; ansic: 34; makefile: 11
file content (131 lines) | stat: -rw-r--r-- 4,494 bytes parent folder | download
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
(** Utility functions for functional programming

    This module provides common functional programming utilities including option handling, string
    operations, list utilities, and more. *)

(** {1 Control flow} *)

val finally : (unit -> 'a) -> (unit -> unit) -> 'a
(** [finally fct clean_f] executes [fct ()], then executes [clean_f ()] regardless of whether [fct]
    succeeded or raised an exception. If [fct] raises an exception, [clean_f] is called before
    re-raising. *)

(** {1 Option utilities} *)

val maybe : 'b -> ('a -> 'b) -> 'a option -> 'b
(** [maybe default f opt] returns [f x] if [opt] is [Some x], otherwise [default] *)

val default : 'a -> 'a option -> 'a
(** [default d opt] returns [x] if [opt] is [Some x], otherwise [d] *)

val maybe_unit : ('a -> unit) -> 'a option -> unit
(** [maybe_unit f opt] executes [f x] if [opt] is [Some x], otherwise does nothing *)

val const : 'a -> 'b -> 'a
(** [const v _] always returns [v], ignoring the second argument *)

val maybes_to_list : 'a option list -> 'a list
(** [maybes_to_list opts] filters out [None] values and extracts values from [Some] *)

(** {1 Either type} *)

type ('a, 'b) either =
  | Left of 'a  (** Left alternative *)
  | Right of 'b  (** Right alternative *)

(** {1 Function composition} *)

val ( $ ) : ('a -> 'b) -> 'a -> 'b
(** Function application operator. [f $ x] is equivalent to [f x] but with lower precedence, useful
    for avoiding parentheses *)

val id : 'a -> 'a
(** Identity function *)

(** {1 Character utilities} *)

val char_is_alphanum : char -> bool
(** Test if character is alphanumeric (a-z, A-Z, or 0-9) *)

(** {1 List utilities} *)

val no_empty : 'a -> 'a list -> 'a list
(** [no_empty emptyVal lst] filters out all occurrences of [emptyVal] from [lst] *)

val list_init : 'a list -> 'a list
(** [list_init lst] returns all elements except the last.
    @raise Failure if list is empty *)

val list_last : 'a list -> 'a
(** [list_last lst] returns the last element.
    @raise Failure if list is empty *)

val list_remove : 'a -> 'a list -> 'a list
(** [list_remove e lst] filters out all occurrences of [e] from [lst] *)

val list_iteri : (int -> 'a -> unit) -> 'a list -> unit
(** [list_iteri f lst] applies [f] to each element with its index (starting at 1) *)

val list_eq_noorder : 'a list -> 'a list -> bool
(** [list_eq_noorder l1 l2] tests if all elements of [l1] are in [l2], ignoring order (not
    bidirectional - only checks l1 ⊆ l2) *)

val list_filter_map : ('a -> 'b option) -> 'a list -> 'b list
(** [list_filter_map f lst] applies [f] to each element, keeping only [Some] results *)

val list_uniq : 'a list -> 'a list
(** Remove duplicate elements from list *)

val list_find_map : ('a -> 'b option) -> 'a list -> 'b
(** [list_find_map p lst] returns the first [Some v] result of applying [p].
    @raise Not_found if no element produces [Some] *)

(** {1 Hashtable utilities} *)

val hashtbl_map : ('a -> 'b) -> ('c, 'a) Hashtbl.t -> ('c, 'b) Hashtbl.t
(** [hashtbl_map f h] creates a new hashtable with [f] applied to all values *)

val hashtbl_keys : ('a, 'b) Hashtbl.t -> 'a list
(** Get list of all keys in hashtable *)

val hashtbl_modify_all : ('a -> 'a) -> ('b, 'a) Hashtbl.t -> unit
(** [hashtbl_modify_all f h] applies [f] to all values in [h] *)

val hashtbl_from_list : ('a * 'b) list -> ('a, 'b) Hashtbl.t
(** Create hashtable from association list *)

val hashtbl_to_list : ('a, 'b) Hashtbl.t -> ('a * 'b) list
(** Convert hashtable to association list *)

(** {1 Tuple utilities} *)

val first : ('a -> 'c) -> 'a * 'b -> 'c * 'b
(** [first f (a, b)] returns [(f a, b)] *)

val second : ('b -> 'c) -> 'a * 'b -> 'a * 'c
(** [second f (a, b)] returns [(a, f b)] *)

(** {1 Conversion exceptions} *)

exception ConversionIntFailed of string * string
(** Raised when integer conversion fails. Contains (location, input) *)

exception ConversionBoolFailed of string * string
(** Raised when boolean conversion fails. Contains (location, input) *)

val user_int_of_string : string -> string -> int
(** [user_int_of_string loc s] converts [s] to int.
    @raise ConversionIntFailed with [loc] if conversion fails *)

val user_bool_of_string : string -> string -> bool
(** [user_bool_of_string loc s] converts [s] to bool.
    @raise ConversionBoolFailed with [loc] if conversion fails *)

(** {1 String set} *)

module StringSet : sig
  include Set.S with type elt = string

  val to_list : t -> string list
  (** Convert set to list *)
end