package async_kernel
Monadic concurrency library
Install
dune-project
Dependency
Authors
Maintainers
Sources
v0.17.0.tar.gz
sha256=01ced973dbc70535f692f38bed524ae82dba17e26e58791b2fbf0d647b160d2e
doc/src/async_kernel/lazy_deferred.ml.html
Source file lazy_deferred.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
open Core open Deferred_std module T = struct type 'a t = { start : unit Ivar.t ; result : 'a Or_error.t Deferred.t } let create ?(rest_exn = `Log) f = let start = Ivar.create () in { start ; result = (let%bind () = Ivar.read start in Monitor.try_with_or_error ~rest:rest_exn f) } ;; let create_or_error ?(rest_exn = `Log) f = let start = Ivar.create () in { start ; result = (let%bind () = Ivar.read start in Monitor.try_with_join_or_error ~rest:rest_exn f) } ;; let wait t = t.result let wait_exn t = wait t >>| ok_exn let start t = Ivar.fill_if_empty t.start () let force t = start t; wait t ;; let force_exn t = force t >>| ok_exn let return a = create (fun () -> return a) let bind t ~f = create (fun () -> let%bind a = force_exn t in force_exn (f a)) ;; let map t ~f = create (fun () -> force_exn t >>| f) let map = `Custom map end include T include Monad.Make (T) let bind' t f = bind t ~f:(fun a -> create (fun () -> f a)) let is_forced t = Ivar.is_full t.start let is_determined t = Deferred.is_determined t.result let peek t = Deferred.peek t.result let peek_exn t = Option.map (peek t) ~f:ok_exn
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>