add CCFormat.lazy_{or,force} for printing thunks

This commit is contained in:
Simon Cruanes 2018-02-09 14:20:46 -06:00
parent d4fafab9b7
commit 35f9b32a5b
2 changed files with 14 additions and 0 deletions

View file

@ -133,6 +133,11 @@ let some pp out = function
| None -> ()
| Some x -> pp out x
let lazy_force pp out (lazy x) = pp out x
let lazy_or ?(default=return "<lazy>") pp out x =
if Lazy.is_val x then pp out (Lazy.force x) else default out ()
(** {2 IO} *)
let output fmt pp x = pp fmt x

View file

@ -129,6 +129,15 @@ val some : 'a printer -> 'a option printer
@since 1.0
*)
val lazy_force : 'a printer -> 'a lazy_t printer
(** [lazy_force pp out x] forces [x] and prints the result with [pp]
@since NEXT_RELEASE *)
val lazy_or : ?default:unit printer -> 'a printer -> 'a lazy_t printer
(** [lazy_or ?default pp out x] prints [default] if [x] is not
evaluated yet, or uses [pp] otherwise
@since NEXT_RELEASE *)
(** {2 ANSI codes}
Use ANSI escape codes https://en.wikipedia.org/wiki/ANSI_escape_code