[OCaml] High Intensity Training Online
1
(** Subjective self-reports at a point in time: what the trainee said, not what
2
the body did. HD1 grounds two of them. HD1 gauges recovery by time and by
3
effect, not by a wider battery of wellness proxies. *)
4
5
type level =
6
| Worse_than_usual
7
| As_usual
8
| Better_than_usual
9
(** A self-report relative to the trainee's usual baseline, not an
10
absolute score. HD1 frames both signals this way — Difficulty is "the
11
weights feel much heavier than usual". Three values resist the false
12
precision of a finer scale, and match HD1's refusal of a finer
13
measurement scale. [Worse_than_usual] is the concerning direction for
14
both signals. *)
15
16
val pp_level : Format.formatter -> level -> unit
17
18
type signal =
19
| Motivation of level
20
| Difficulty of level
21
(** The only self-reports HD1 grounds. Motivation is HD1 chapter 6, and a
22
halt in motivation is a recognized overtraining symptom ("with those
23
who chronically overtrain, such a disinclination is easy to
24
understand"). Difficulty is HD1's "the weights feel much heavier than
25
usual" — a depletion symptom. HD1 gauges recovery by time and by
26
effect (a stall or decompensation), not by a wider battery of wellness
27
proxies. This module models none of the other proxies. *)
28
29
type t
30
type error = Duplicate_signal of signal
31
32
exception Invalid of error
33
34
val make : reported_at:Recovery.timestamp -> signal list -> t
35
(** Raises [Invalid] when feedback repeats a signal category. *)
36
37
val reported_at : t -> Recovery.timestamp
38
val signals : t -> signal list
39