`include Tenacious_lib.Heart_intf.S`
`val version : string`
`module Heart : sig ... end`
`module Glass : sig ... end`
`module Weak_glass : sig ... end`
`type t``= Heart.t```
`val watch : Glass.t ‑> t`
`val combine : t list ‑> t`
`val combine2 : t ‑> t ‑> t`
`val unbreakable : t`

`is_unbreakable t` is only approximate, since it can't be known in general whether a heart can break.

`val is_unbreakable : t ‑> bool`

`is_unbreakable t` is only approximate, since it can't be known in general whether a heart can break.

`val is_broken : t ‑> bool`

This watches the heart until it's broken and fills the deferred when it is. Note that it is a memory leak to call this on a heart that never breaks.

`val when_broken : t ‑> unit Async.Deferred.t`

This watches the heart until it's broken and fills the deferred when it is. Note that it is a memory leak to call this on a heart that never breaks.

tells you about what happens first: heart broken (`None`) or the given deferred determined with `x` (`Some x`)

`val or_broken : t ‑> 'a Async.Deferred.t ‑> 'a option Async.Deferred.t`

tells you about what happens first: heart broken (`None`) or the given deferred determined with `x` (`Some x`)