Channels
Канала (channels) это пара модулей (In_channel
и Out_channel
) из стандартной библиотеке, упрощающие работу с файловыми потоками. Это не абстракция, а именно обвёртка над файловым интерфейсом операционной системы.
Именование
Сокращать название каналов можно до oc
(Out_channel
) и ic
(In_channel
). Либо используйте осознанные имена, вроде config_file
.
Безопасная работа
Предпочитайте открытие канала при помощи функций with_open_*
, так как в случае исключений они безопасно закроют файл.
ocaml
let () =
In_channel.with_open_text "some.file" @@ fun ic -> (* ... *)
Канал из строчки
Из-за особенности устройства channels, замокать это нельзя, но можно несколько извратиться посредством пайпов. Пример кода взят от сюда:
ocaml
let in_channel_of_string str =
let (in_file_fd, out_file_fd) = Unix.pipe () in
let ic = Unix.in_channel_of_descr in_file_fd in
let out = Unix.out_channel_of_descr out_file_fd in
output_string out str;
close_out out;
ic
Есть также готовая библиотека для этого под названием redirect.