Coccinelle release 1.0.0-rc1
[bpt/coccinelle.git] / ocamlsexp / conv.mli
CommitLineData
b1b2de81
C
1(* File: conv.mli
2
3 Copyright (C) 2005-
4
5 Jane Street Holding, LLC
6 Author: Markus Mottl
7 email: mmottl\@janestcapital.com
8 WWW: http://www.janestcapital.com/ocaml
9
10 This library is free software; you can redistribute it and/or
11 modify it under the terms of the GNU Lesser General Public
12 License as published by the Free Software Foundation; either
13 version 2 of the License, or (at your option) any later version.
14
15 This library is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public
21 License along with this library; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23*)
24
25(** Conv: Utility Module for S-expression Conversions *)
26
27open Bigarray
28
29(** Dummy definition for "optional" options *)
30type 'a sexp_option = 'a option
31
32
33(** {6 Conversion of OCaml-values to S-expressions} *)
34
35val default_string_of_float : (float -> string) ref
36(** [default_string_of_float] reference to the default function used
37 to convert floats to strings.
38
39 Initially set to [fun n -> sprintf "%.20G" n].
40*)
41
42val write_old_option_format : bool ref
43(** [write_old_option_format] reference for the default option format
44 used to write option values. If set to [true], the old-style option
45 format will be used, the new-style one otherwise.
46
47 Initially set to [true].
48*)
49
50val read_old_option_format : bool ref
51(** [read_old_option_format] reference for the default option format
52 used to read option values. [Of_sexp_error] will be raised with
53 old-style option values if this reference is set to [false].
54 Reading new-style option values is always supported.
55
56 Initially set to [true].
57*)
58
59val sexp_of_unit : unit -> Sexp.t
60(** [sexp_of_unit ()] converts a value of type [unit] to an S-expression. *)
61
62val sexp_of_bool : bool -> Sexp.t
63(** [sexp_of_bool b] converts the value [x] of type [bool] to an
64 S-expression. *)
65
66val sexp_of_string : string -> Sexp.t
67(** [sexp_of_bool str] converts the value [str] of type [string] to an
68 S-expression. *)
69
70val sexp_of_char : char -> Sexp.t
71(** [sexp_of_char c] converts the value [c] of type [char] to an
72 S-expression. *)
73
74val sexp_of_int : int -> Sexp.t
75(** [sexp_of_int n] converts the value [n] of type [int] to an
76 S-expression. *)
77
78val sexp_of_float : float -> Sexp.t
79(** [sexp_of_float n] converts the value [n] of type [float] to an
80 S-expression. *)
81
82val sexp_of_int32 : int32 -> Sexp.t
83(** [sexp_of_int32 n] converts the value [n] of type [int32] to an
84 S-expression. *)
85
86val sexp_of_int64 : int64 -> Sexp.t
87(** [sexp_of_int64 n] converts the value [n] of type [int64] to an
88 S-expression. *)
89
90val sexp_of_nativeint : nativeint -> Sexp.t
91(** [sexp_of_nativeint n] converts the value [n] of type [nativeint] to an
92 S-expression. *)
93
94val sexp_of_big_int : Big_int.big_int -> Sexp.t
95(** [sexp_of_big_int n] converts the value [n] of type [Big_int.big_int]
96 to an S-expression. *)
97
98val sexp_of_nat : Nat.nat -> Sexp.t
99(** [sexp_of_nat n] converts the value [n] of type [Nat.nat] to an
100 S-expression. *)
101
102val sexp_of_num : Num.num -> Sexp.t
103(** [sexp_of_num n] converts the value [n] of type [Num.num] to an
104 S-expression. *)
105
106val sexp_of_ratio : Ratio.ratio -> Sexp.t
107(** [sexp_of_ratio n] converts the value [n] of type [Ratio.ratio] to an
108 S-expression. *)
109
110val sexp_of_ref : ('a -> 'b) -> 'a ref -> 'b
111(** [sexp_of_ref conv r] converts the value [r] of type ['a ref] to
112 an S-expression. Uses [conv] to convert values of type ['a] to an
113 S-expression. *)
114
115val sexp_of_lazy : ('a -> 'b) -> 'a lazy_t -> 'b
116(** [sexp_of_ref conv l] converts the value [l] of type ['a lazy_t] to
117 an S-expression. Uses [conv] to convert values of type ['a] to an
118 S-expression. *)
119
120val sexp_of_option : ('a -> Sexp.t) -> 'a option -> Sexp.t
121(** [sexp_of_option conv opt] converts the value [opt] of type ['a
122 option] to an S-expression. Uses [conv] to convert values of type
123 ['a] to an S-expression. *)
124
125val sexp_of_pair : ('a -> Sexp.t) -> ('b -> Sexp.t) -> 'a * 'b -> Sexp.t
126(** [sexp_of_pair conv1 conv2 pair] converts a pair to an S-expression.
127 It uses its first argument to convert the first element of the pair,
128 and its second argument to convert the second element of the pair. *)
129
130val sexp_of_triple :
131 ('a -> Sexp.t) -> ('b -> Sexp.t) -> ('c -> Sexp.t) -> 'a * 'b * 'c -> Sexp.t
132(** [sexp_of_triple conv1 conv2 conv3 triple] converts a triple to
133 an S-expression using [conv1], [conv2], and [conv3] to convert its
134 elements. *)
135
136val sexp_of_list : ('a -> Sexp.t) -> 'a list -> Sexp.t
137(** [sexp_of_list conv lst] converts the value [lst] of type ['a
138 list] to an S-expression. Uses [conv] to convert values of type
139 ['a] to an S-expression. *)
140
141val sexp_of_array : ('a -> Sexp.t) -> 'a array -> Sexp.t
142(** [sexp_of_array conv ar] converts the value [ar] of type ['a
143 array] to an S-expression. Uses [conv] to convert values of type
144 ['a] to an S-expression. *)
145
146val sexp_of_hashtbl :
147 ('a -> Sexp.t) -> ('b -> Sexp.t) -> ('a, 'b) Hashtbl.t -> Sexp.t
148(** [sexp_of_hashtbl conv_key conv_value htbl] converts the value [htbl]
149 of type [('a, 'b) Hashtbl.t] to an S-expression. Uses [conv_key]
150 to convert the hashtable keys of type ['a], and [conv_value] to
151 convert hashtable values of type ['b] to S-expressions. *)
152
153val sexp_of_float32_vec :
154 (float, float32_elt, fortran_layout) Array1.t -> Sexp.t
155(** [sexp_of_float32_vec vec] converts the one-dimensional bigarray
156 [vec] of 32-bit floats in Fortran-layout to an S-expression. *)
157
158val sexp_of_float64_vec :
159 (float, float64_elt, fortran_layout) Array1.t -> Sexp.t
160(** [sexp_of_float64_vec vec] converts the one-dimensional bigarray
161 [vec] of 64-bit floats in Fortran-layout to an S-expression. *)
162
163val sexp_of_vec : (float, float64_elt, fortran_layout) Array1.t -> Sexp.t
164(** [sexp_of_vec vec] same as {!Conv.sexp_of_float64_vec}. *)
165
166val sexp_of_float32_mat :
167 (float, float32_elt, fortran_layout) Array2.t -> Sexp.t
168(** [sexp_of_float32_mat mat] converts the two-dimensional bigarray
169 [mat] of 32-bit floats in Fortran-layout to an S-expression. *)
170
171val sexp_of_float64_mat :
172 (float, float64_elt, fortran_layout) Array2.t -> Sexp.t
173(** [sexp_of_float64_mat mat] converts the two-dimensional bigarray
174 [mat] of 64-bit floats in Fortran-layout to an S-expression. *)
175
176val sexp_of_mat : (float, float64_elt, fortran_layout) Array2.t -> Sexp.t
177(** [sexp_of_mat mat] same as {!Conv.sexp_of_float64_mat}. *)
178
179val sexp_of_abstr : 'a -> Sexp.t
180(** [sexp_of_abstr x] converts the value [x] of abstract type to an
181 S-expression. *)
182
183val sexp_of_fun : ('a -> 'b) -> Sexp.t
184(** [sexp_of_fun f] converts the value [f] of function type to an
185 S-expression. *)
186
187(** Type used for declaring existing types as opaque to sexp converters,
188 i.e. even if there is a defined converter for ['a], it will not
189 be called. This is useful to e.g. suppress printing of extremely
190 large sub-structures for purely informational, human-readable output.
191*)
192type 'a opaque = 'a
193
194val sexp_of_opaque : ('a -> Sexp.t) -> 'a opaque -> Sexp.t
195(** [sexp_of_opaque _ _] converts opaque OCaml-values to S-expressions. *)
196
197val string_of__of__sexp_of : ('a -> Sexp.t) -> 'a -> string
198(** [string_of__of__sexp_of conv x] converts the OCaml-value [x] to
199 an S-expression represented as a string by using conversion function
200 [conv]. *)
201
202
203(** {6 Conversion of S-expressions to OCaml-values} *)
204
205exception Of_sexp_error of string * Sexp.t
206(** [Of_sexp_error (reason, sexp)] the exception raised when an
207 S-expression could not be successfully converted to an OCaml-value. *)
208
209val record_check_extra_fields : bool ref
210(** [record_check_extra_fields] checks for extra (= unknown) fields
211 in record S-expressions. *)
212
213val of_sexp_error : string -> Sexp.t -> 'a
214(** [of_sexp_error reason sexp] @raise the exception [Of_sexp_error
215 (reason, sexp)]. *)
216
217val unit_of_sexp : Sexp.t -> unit
218(** [unit_of_sexp sexp] converts S-expression [sexp] to a value of type
219 [unit]. *)
220
221val bool_of_sexp : Sexp.t -> bool
222(** [bool_of_sexp sexp] converts S-expression [sexp] to a value of type
223 [bool]. *)
224
225val string_of_sexp : Sexp.t -> string
226(** [string_of_sexp sexp] converts S-expression [sexp] to a value of type
227 [string]. *)
228
229val char_of_sexp : Sexp.t -> char
230(** [char_of_sexp sexp] converts S-expression [sexp] to a value of type
231 [char]. *)
232
233val int_of_sexp : Sexp.t -> int
234(** [int_of_sexp sexp] converts S-expression [sexp] to a value of type
235 [int]. *)
236
237val float_of_sexp : Sexp.t -> float
238(** [float_of_sexp sexp] converts S-expression [sexp] to a value of type
239 [float]. *)
240
241val int32_of_sexp : Sexp.t -> int32
242(** [int32_of_sexp sexp] converts S-expression [sexp] to a value of type
243 [int32]. *)
244
245val int64_of_sexp : Sexp.t -> int64
246(** [int64_of_sexp sexp] converts S-expression [sexp] to a value of type
247 [int64]. *)
248
249val nativeint_of_sexp : Sexp.t -> nativeint
250(** [nativeint_of_sexp sexp] converts S-expression [sexp] to a value
251 of type [nativeint]. *)
252
253val big_int_of_sexp : Sexp.t -> Big_int.big_int
254(** [big_int_of_sexp sexp] converts S-expression [sexp] to a value
255 of type [Big_int.big_int]. *)
256
257val nat_of_sexp : Sexp.t -> Nat.nat
258(** [nat_of_sexp sexp] converts S-expression [sexp] to a value
259 of type [Nat.nat]. *)
260
261val num_of_sexp : Sexp.t -> Num.num
262(** [num_of_sexp sexp] converts S-expression [sexp] to a value
263 of type [Nat.num]. *)
264
265val ratio_of_sexp : Sexp.t -> Ratio.ratio
266(** [ratio_of_sexp sexp] converts S-expression [sexp] to a value
267 of type [Nat.ratio]. *)
268
269val ref_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a ref
270(** [ref_of_sexp conv sexp] converts S-expression [sexp] to a value
271 of type ['a ref] using conversion function [conv], which converts
272 an S-expression to a value of type ['a]. *)
273
274val lazy_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a lazy_t
275(** [lazy_of_sexp conv sexp] converts S-expression [sexp] to a value
276 of type ['a lazy_t] using conversion function [conv], which converts
277 an S-expression to a value of type ['a]. *)
278
279val option_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a option
280(** [option_of_sexp conv sexp] converts S-expression [sexp] to a value
281 of type ['a option] using conversion function [conv], which converts
282 an S-expression to a value of type ['a]. *)
283
284val pair_of_sexp : (Sexp.t -> 'a) -> (Sexp.t -> 'b) -> Sexp.t -> 'a * 'b
285(** [pair_of_sexp conv1 conv2 sexp] converts S-expression [sexp] to a pair
286 of type ['a * 'b] using conversion functions [conv1] and [conv2],
287 which convert S-expressions to values of type ['a] and ['b]
288 respectively. *)
289
290val triple_of_sexp :
291 (Sexp.t -> 'a) -> (Sexp.t -> 'b) -> (Sexp.t -> 'c) -> Sexp.t -> 'a * 'b * 'c
292(** [triple_of_sexp conv1 conv2 conv3 sexp] converts S-expression [sexp]
293 to a triple of type ['a * 'b * 'c] using conversion functions [conv1],
294 [conv2], and [conv3], which convert S-expressions to values of type
295 ['a], ['b], and ['c] respectively. *)
296
297val list_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a list
298(** [list_of_sexp conv sexp] converts S-expression [sexp] to a value
299 of type ['a list] using conversion function [conv], which converts
300 an S-expression to a value of type ['a]. *)
301
302val array_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a array
303(** [array_of_sexp conv sexp] converts S-expression [sexp] to a value
304 of type ['a array] using conversion function [conv], which converts
305 an S-expression to a value of type ['a]. *)
306
307val hashtbl_of_sexp :
308 (Sexp.t -> 'a) -> (Sexp.t -> 'b) -> Sexp.t -> ('a, 'b) Hashtbl.t
309(** [hashtbl_of_sexp conv_key conv_value sexp] converts S-expression
310 [sexp] to a value of type [('a, 'b) Hashtbl.t] using conversion
311 function [conv_key], which converts an S-expression to hashtable
312 key of type ['a], and function [conv_value], which converts an
313 S-expression to hashtable value of type ['b]. *)
314
315val float32_vec_of_sexp :
316 Sexp.t -> (float, float32_elt, fortran_layout) Array1.t
317(** [float32_vec_of_sexp sexp] converts S-expression [sexp] to a
318 one-dimensional bigarray of 32-bit floats in Fortran-layout. *)
319
320val float64_vec_of_sexp :
321 Sexp.t -> (float, float64_elt, fortran_layout) Array1.t
322(** [float64_vec_of_sexp sexp] converts S-expression [sexp] to a
323 one-dimensional bigarray of 64-bit floats in Fortran-layout. *)
324
325val vec_of_sexp : Sexp.t -> (float, float64_elt, fortran_layout) Array1.t
326(** [vec_of_sexp sexp] same as {!float64_vec_of_sexp}. *)
327
328val float32_mat_of_sexp :
329 Sexp.t -> (float, float32_elt, fortran_layout) Array2.t
330(** [float32_mat_of_sexp sexp] converts S-expression [sexp] to a
331 two-dimensional bigarray of 32-bit floats in Fortran-layout. *)
332
333val float64_mat_of_sexp :
334 Sexp.t -> (float, float64_elt, fortran_layout) Array2.t
335(** [float64_mat_of_sexp sexp] converts S-expression [sexp] to a
336 two-dimensional bigarray of 64-bit floats in Fortran-layout. *)
337
338val mat_of_sexp : Sexp.t -> (float, float64_elt, fortran_layout) Array2.t
339(** [mat_of_sexp sexp] same as {!Conv.float64_mat_of_sexp}. *)
340
341val fun_of_sexp : Sexp.t -> ('a -> 'b)
342(** [fun_of_sexp sexp] @raise a conversion error when attempting to
343 convert an S-expression to a function. *)
344
345val of_string__of__of_sexp : (Sexp.t -> 'a) -> string -> 'a
346(** [of_string__of__of_sexp conv str] converts the S-expression [str]
347 represented as a string to an OCaml-value by using conversion function
348 [conv]. *)