1
-
Removed:
type t = {
2
-
Removed:
name : string;
3
-
Removed:
workouts : Workout_prescription.t list;
4
-
Removed:
recovery_base : Recovery.duration;
5
-
Removed:
}
1
+
Added:
(* Blank slate: stub only. Interface (routine.mli) is the design surface. *)
6
2
3
+
Added:
type t = unit
7
4
type error = Empty_routine
8
5
9
-
Removed:
let make ~name ~workouts =
10
-
Removed:
match workouts with
11
-
Removed:
| [] -> Error Empty_routine
12
-
Removed:
| _ -> Ok { name; workouts; recovery_base = Recovery.days 4 }
6
+
Added:
let make ~name:_ ~workouts:_ = failwith "TODO"
7
+
Added:
let name _ = failwith "TODO"
8
+
Added:
let workouts _ = failwith "TODO"
9
+
Added:
let workout_after _ _ = failwith "TODO"
10
+
Added:
let recovery_base _ = failwith "TODO"
11
+
Added:
let pp _ _ = failwith "TODO"
13
12
14
-
Removed:
let name t = t.name
15
-
Removed:
let workouts t = t.workouts
16
-
Removed:
17
-
Removed:
let workout_after t w =
18
-
Removed:
match t.workouts with
19
-
Removed:
| [] -> invalid_arg "Routine.workout_after: empty routine"
20
-
Removed:
| first :: _ -> (
21
-
Removed:
let rec index i = function
22
-
Removed:
| [] -> None
23
-
Removed:
| x :: _ when Workout_prescription.equal x w -> Some i
24
-
Removed:
| _ :: rest -> index (i + 1) rest
25
-
Removed:
in
26
-
Removed:
match index 0 t.workouts with
27
-
Removed:
| None -> first
28
-
Removed:
| Some i -> List.nth t.workouts ((i + 1) mod List.length t.workouts))
29
-
Removed:
30
-
Removed:
let recovery_base t = t.recovery_base
31
-
Removed:
32
-
Removed:
let pp fmt t =
33
-
Removed:
Format.fprintf fmt "%s (%d workouts)" t.name (List.length t.workouts)
34
-
Removed:
35
-
Removed:
(* {1 Heavy Duty presets} *)
36
-
Removed:
37
-
Removed:
let by_name n =
38
-
Removed:
match
39
-
Removed:
List.find_opt (fun ex -> String.equal (Exercise.name ex) n) Exercise.catalog
40
-
Removed:
with
41
-
Removed:
| Some ex -> ex
42
-
Removed:
| None -> invalid_arg (Printf.sprintf "no catalog exercise named %s" n)
43
-
Removed:
44
-
Removed:
let ok = function
45
-
Removed:
| Ok v -> v
46
-
Removed:
| Error _ -> invalid_arg "invalid preset definition"
47
-
Removed:
48
-
Removed:
let band lo hi =
49
-
Removed:
ok
50
-
Removed:
(Units.Rep_range.make
51
-
Removed:
~min:(ok (Units.Reps.of_int lo))
52
-
Removed:
~max:(ok (Units.Reps.of_int hi)))
53
-
Removed:
54
-
Removed:
let prescribe ?(substitutes = []) exercise_name lo hi =
55
-
Removed:
ok
56
-
Removed:
(Prescription.make ~exercise:(by_name exercise_name)
57
-
Removed:
~target_reps:(band lo hi)
58
-
Removed:
~allowed_substitutes:(List.map by_name substitutes))
59
-
Removed:
60
-
Removed:
let straight ?substitutes exercise_name lo hi =
61
-
Removed:
Set_group_prescription.Straight (prescribe ?substitutes exercise_name lo hi)
62
-
Removed:
63
-
Removed:
let superset (first_name, flo, fhi, fsub) (second_name, slo, shi, ssub) =
64
-
Removed:
Set_group_prescription.Superset
65
-
Removed:
{
66
-
Removed:
first = prescribe ?substitutes:fsub first_name flo fhi;
67
-
Removed:
second = prescribe ?substitutes:ssub second_name slo shi;
68
-
Removed:
}
69
-
Removed:
70
-
Removed:
let pre_exhaust (isolation_name, ilo, ihi, isub) (compound_name, clo, chi, csub)
71
-
Removed:
=
72
-
Removed:
Set_group_prescription.Pre_exhaust
73
-
Removed:
{
74
-
Removed:
isolation = prescribe ?substitutes:isub isolation_name ilo ihi;
75
-
Removed:
compound = prescribe ?substitutes:csub compound_name clo chi;
76
-
Removed:
}
77
-
Removed:
78
-
Removed:
let workout ~id ~name set_groups =
79
-
Removed:
ok (Workout_prescription.make ~id ~name ~set_groups)
80
-
Removed:
81
-
Removed:
(* Mentzer's Ideal Routine: a three-way split built around pre-exhaustion
82
-
Removed:
supersets — an isolation movement immediately preceding the compound for
83
-
Removed:
the same target, so the larger muscle is the limiting factor. *)
84
-
Removed:
let ideal_routine =
85
-
Removed:
let workout_a =
86
-
Removed:
workout ~id:"ideal_a" ~name:"Workout A: Chest, Shoulders, Triceps"
87
-
Removed:
[
88
-
Removed:
pre_exhaust ("Chest Flye", 6, 8, None)
89
-
Removed:
("Barbell Bench Press", 6, 8, Some [ "Dumbbell Bench Press" ]);
90
-
Removed:
straight "Lateral Raise" 6 8;
91
-
Removed:
straight ~substitutes:[ "Dumbbell Shoulder Press" ] "Overhead Press" 6 8;
92
-
Removed:
straight ~substitutes:[ "Skullcrusher" ] "Triceps Pushdown" 6 8;
93
-
Removed:
]
94
-
Removed:
in
95
-
Removed:
let workout_b =
96
-
Removed:
workout ~id:"ideal_b" ~name:"Workout B: Back, Biceps"
97
-
Removed:
[
98
-
Removed:
superset
99
-
Removed:
("Pulldown", 6, 8, Some [ "Pull-Up" ])
100
-
Removed:
("Barbell Row", 6, 8, Some [ "Dumbbell Row"; "Seated Cable Row" ]);
101
-
Removed:
straight ~substitutes:[ "Dumbbell Curl" ] "Barbell Curl" 6 8;
102
-
Removed:
]
103
-
Removed:
in
104
-
Removed:
let workout_c =
105
-
Removed:
workout ~id:"ideal_c" ~name:"Workout C: Legs"
106
-
Removed:
[
107
-
Removed:
pre_exhaust
108
-
Removed:
("Leg Extension", 6, 8, None)
109
-
Removed:
("Back Squat", 6, 8, Some [ "Leg Press" ]);
110
-
Removed:
straight "Leg Curl" 6 8;
111
-
Removed:
straight "Calf Raise" 6 8;
112
-
Removed:
]
113
-
Removed:
in
114
-
Removed:
{
115
-
Removed:
name = "Ideal Routine";
116
-
Removed:
workouts = [ workout_a; workout_b; workout_c ];
117
-
Removed:
recovery_base = Recovery.days 4;
118
-
Removed:
}
119
-
Removed:
120
-
Removed:
(* The Consolidation Routine: the minimalist variant — a handful of compound
121
-
Removed:
movements, one working set each, trained infrequently. *)
122
-
Removed:
let consolidation_routine =
123
-
Removed:
let workout_a =
124
-
Removed:
workout ~id:"consolidation_a" ~name:"Workout A"
125
-
Removed:
[
126
-
Removed:
straight ~substitutes:[ "Leg Press" ] "Back Squat" 6 8;
127
-
Removed:
straight "Pulldown" 6 8;
128
-
Removed:
]
129
-
Removed:
in
130
-
Removed:
let workout_b =
131
-
Removed:
workout ~id:"consolidation_b" ~name:"Workout B"
132
-
Removed:
[
133
-
Removed:
straight ~substitutes:[ "Dumbbell Bench Press" ] "Barbell Bench Press" 6
134
-
Removed:
8;
135
-
Removed:
straight "Deadlift" 6 8;
136
-
Removed:
]
137
-
Removed:
in
138
-
Removed:
{
139
-
Removed:
name = "Consolidation Routine";
140
-
Removed:
workouts = [ workout_a; workout_b ];
141
-
Removed:
recovery_base = Recovery.days 7;
142
-
Removed:
}
13
+
Added:
(* Presets are values of type [t = unit]; kept as unit placeholders so the
14
+
Added:
module loads without evaluating a [failwith]. *)
15
+
Added:
let ideal_routine = ()
16
+
Added:
let consolidation_routine = ()