Record_in_channel.Make
Functor for making Record_in_channel
modules.
module M : In_channel_input_record
val stdin : M.t
create file_name
opens an t
on the standard input channel.
val create : Base.string -> M.t
create file_name
opens an input channel on the file specified by file_name
. You may want to use Base.Exn.protectx
with this.
val close : M.t -> Base.unit
close t
Close the t
.
val with_file : Base.string -> f:( M.t -> 'a ) -> 'a
with_file file_name ~f
executes ~f
on the channel created from file_name
and ensures it is closed properly.
input_record t
returns Some record
if there is a record
to return. If there are no more records, None
is returned. Raises exceptions on bad input (e.g., bad file format).
fold_records t ~init ~f
reduces all records from a t
down to a single value of type 'a
.
fold'_records t ~init ~f
is like fold_records
except that f
is provided the 0-based record index as its first argument.
val with_file_fold_records :
Base.string ->
init:'a ->
f:( 'a -> M.record -> 'a ) ->
'a
with_file_fold_records file_name ~init ~f
is like fold_records t ~init ~f
except that it is passed a file name, and it manages t
automatically. See with_file
.
val with_file_foldi_records :
Base.string ->
init:'a ->
f:( Base.int -> 'a -> M.record -> 'a ) ->
'a
with_file_foldi_records file_name ~init ~f
is like foldi_records t ~init ~f
except that it is passed a file name, and it manages t
automatically. See with_file
.
The iter
functions are like the fold
functions except they do not take an init
value and the f
function returns unit
insead of some other value 'a
, and thus return unit
rather than a value 'a
.
Use them for side-effects.
iter_records t ~f
calls f
on each record
in t
. As f
returns unit
this is generally used for side effects.
iteri_records t ~f
is like iteri_records t ~f
except that f
is passed in the 0-indexed record index as its first argument.
val with_file_iter_records :
Base.string ->
f:( M.record -> Base.unit ) ->
Base.unit
with_file_iter_records file_name ~init ~f
is like iter_records t ~init ~f
except that it is passed a file name, and it manages t
automatically. See with_file
.
val with_file_iteri_records :
Base.string ->
f:( Base.int -> M.record -> Base.unit ) ->
Base.unit
with_file_iteri_records file_name ~init ~f
is like iteri_records t ~init ~f
except that it is passed a file name, and it manages t
automatically. See with_file
.
These functions return record
lists.
val with_file_records : Base.string -> M.record Base.list
These are a bit different:
* There are no with_file
versions as you would have to do some fiddly things to keep the channel open, making them not so nice to use.
* If an exception is raised sometime during the pipeline, it will blow up, but any successful processing that happended, will have happened. So be careful if you are doing side-effecting things.