Module Lwt_fmt
Contents
Instructions: Use this module in your project
In the IDE (CLion, Visual Studio Code, Xcode, etc.) you use for your DkSDK project:
Add the following to your project's
dependencies/CMakeLists.txt
:DkSDKProject_DeclareAvailable(lwt CONSTRAINT "= 5.6.1" FINDLIBS lwt lwt.unix) DkSDKProject_MakeAvailable(lwt)
Add the
Findlib::lwt
library to any desired targets insrc/*/CMakeLists.txt
:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::lwt)
Click your IDE's
Build
button
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install lwt.5.6.1
Edit your
dune-project
and add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (lwt (>= 5.6.1))))
Then run:
dune build *.opam # if this fails, run: dune build
Edit your
<package>.opam
file and add:depends: [ # ... existing dependencies ... "lwt" {>= "5.6.1"} ]
Then run:
opam install . --deps-only
FINALLY, add the lwt.unix
library to any desired (library)
and/or (executable)
targets in your **/dune
files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
lwt.unix))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
lwt.unix))
This module bridges the gap between
Stdlib.Format
and Lwt
.
Although it is not required, it is recommended to use this module with
the Fmt
library.
Compared to regular formatting function, the main difference is that printing statements will now return promises instead of blocking.
val
printf : ``(
'a
,
Stdlib.Format.formatter
, unit, ``unit
Lwt.t
)``
format4
->
'a
Returns a promise that prints on the standard output. Similar to
Stdlib.Format.printf
.
val
eprintf : ``(
'a
,
Stdlib.Format.formatter
, unit, ``unit
Lwt.t
)``
format4
->
'a
Returns a promise that prints on the standard error. Similar to
Stdlib.Format.eprintf
.
Formatters
type
formatter
Lwt enabled formatters
type
order`` =
|
String
of
string * int * int
(*
String (s, off, len)
indicate the output ofs
at offsetoff
and lengthlen
.*)
|
Flush
(* Flush operation
*)
val
make_stream : ``unit
->
order
Lwt_stream.t
*
formatter
make_stream ()
returns a formatter and a stream of all the writing
order given on that stream.
val
of_channel :
Lwt_io.output_channel
->
formatter
of_channel oc
creates a formatter that writes to the channel oc
.
val
stdout :
formatter
Formatter printing on Lwt_io.stdout
.
val
stderr :
formatter
Formatter printing on Lwt_io.stdout
.
val
make_formatter : ``commit:``(``unit
->
``unit
Lwt.t
)``
->
``fmt:
Stdlib.Format.formatter
->
``unit
->
formatter
make_formatter ~commit ~fmt
creates a new lwt formatter based on the
Stdlib.Format.formatter
fmt
. The commit
function will be called by the printing functions to
update the underlying channel.
val
get_formatter :
formatter
->
Stdlib.Format.formatter
get_formatter fmt
returns the underlying
Stdlib.Format.formatter
.
To access the underlying formatter during printing, it is recommended to
use %t
and %a
.
Printing
val
fprintf :
formatter
->
``(
'a
,
Stdlib.Format.formatter
, unit, ``unit
Lwt.t
)``
format4
->
'a
val
kfprintf : ``(
formatter
->
``unit
Lwt.t
->
'a
)``
->
formatter
->
``(
'b
,
Stdlib.Format.formatter
, unit,
'a
)``
format4
->
'b
val
ifprintf :
formatter
->
``(
'a
,
Stdlib.Format.formatter
, unit, ``unit
Lwt.t
)``
format4
->
'a
val
ikfprintf : ``(
formatter
->
``unit
Lwt.t
->
'a
)``
->
formatter
->
``(
'b
,
Stdlib.Format.formatter
, unit,
'a
)``
format4
->
'b
flush fmt
flushes the formatter (as with
Stdlib.Format.pp_print_flush
)
and executes all the printing action on the underlying channel.
Low level functions
val
write_order :
Lwt_io.output_channel
->
order
->
``unit
Lwt.t
write_order oc o
applies the order o
on the channel oc
.
Write all the pending orders of a formatter. Warning: This function
flush neither the internal format queues nor the underlying channel and
is intended for low level use only. You should probably use
flush
instead.