(* Authored routines. HD1 supplies one, the Ideal Routine, which this module reproduces exactly: its supersets as pre-exhaust pairs, its own "or" lists as permitted substitutes, the 6-10 band on every exercise. This is doctrine content. It stays apart from the plan types in [Prescription] that build it. *) open Prescription open Exercise let exercise key = match Exercise.find key with | Some exercise -> exercise | None -> invalid_arg "Ideal Routine references an absent catalog key" let dumbbell_flyes = exercise { equipment = Dumbbell; movement = Fly; variation = Standard } let cable_crossovers = exercise { equipment = Cable; movement = Crossover; variation = Standard } let pec_deck = exercise { equipment = Machine; movement = Pec_deck; variation = Standard } let incline_presses = exercise { equipment = Unspecified; movement = Press; variation = Incline } let laterals = exercise { equipment = Unspecified; movement = Lateral_raise; variation = Standard } let bent_over_laterals = exercise { equipment = Dumbbell; movement = Lateral_raise; variation = Bent_over } let reverse_pec_deck = exercise { equipment = Machine; movement = Pec_deck; variation = Rear_delt } let lying_french_presses = exercise { equipment = Unspecified; movement = French_press; variation = Lying } let pressdowns = exercise { equipment = Cable; movement = Pressdown; variation = Standard } let triceps_machine = exercise { equipment = Machine; movement = Press; variation = Triceps } let dips = exercise { equipment = Bodyweight; movement = Dip; variation = Standard } let pullovers = exercise { equipment = Unspecified; movement = Pullover; variation = Standard } let straight_arm_pulldowns = exercise { equipment = Cable; movement = Pulldown; variation = Straight_arm } let close_grip_pulldowns = exercise { equipment = Cable; movement = Pulldown; variation = Close_grip_palms_up } let bent_over_rows = exercise { equipment = Barbell; movement = Row; variation = Bent_over } let shrugs = exercise { equipment = Unspecified; movement = Shrug; variation = Standard } let hyperextensions = exercise { equipment = Bodyweight; movement = Hyperextension; variation = Standard } let deadlifts = exercise { equipment = Barbell; movement = Deadlift; variation = Standard } let curls = exercise { equipment = Barbell; movement = Curl; variation = Standard } let preacher_curls = exercise { equipment = Barbell; movement = Curl; variation = Preacher } let leg_extensions = exercise { equipment = Machine; movement = Leg_extension; variation = Standard } let leg_presses = exercise { equipment = Machine; movement = Leg_press; variation = Standard } let squats = exercise { equipment = Barbell; movement = Squat; variation = Standard } let leg_curls = exercise { equipment = Machine; movement = Leg_curl; variation = Standard } let calf_raises = exercise { equipment = Unspecified; movement = Calf_raise; variation = Standard } let sit_ups = exercise { equipment = Bodyweight; movement = Sit_up; variation = Standard } (* HD1's guideline window for every listed exercise. *) let six_to_ten = Rep_range.make ~min:6 ~max:10 let prescribe ?(substitutes = []) delivery = Stimulus.make ~delivery ~rep_range:six_to_ten ~allowed_substitutes:substitutes let single ?substitutes exercise = prescribe ?substitutes (Stimulus.Single exercise) let pre_exhaust ?substitutes ~isolation ~compound () = prescribe ?substitutes (Stimulus.Pre_exhaust { isolation; compound }) let day ~name stimuli = Workout.make ~name ~stimuli let ideal_day_one = day ~name:"Day 1" [ pre_exhaust ~substitutes:[ cable_crossovers; pec_deck ] ~isolation:dumbbell_flyes ~compound:incline_presses (); single laterals; single ~substitutes:[ reverse_pec_deck ] bent_over_laterals; pre_exhaust ~substitutes:[ pressdowns; triceps_machine ] ~isolation:lying_french_presses ~compound:dips (); ] let ideal_day_two = day ~name:"Day 2" [ pre_exhaust ~substitutes:[ straight_arm_pulldowns ] ~isolation:pullovers ~compound:close_grip_pulldowns (); single bent_over_rows; single shrugs; single ~substitutes:[ deadlifts ] hyperextensions; single ~substitutes:[ preacher_curls ] curls; ] let ideal_day_three = day ~name:"Day 3" [ pre_exhaust ~substitutes:[ squats ] ~isolation:leg_extensions ~compound:leg_presses (); single leg_curls; single calf_raises; single sit_ups; ] let ideal = Routine.make ~name:"Ideal Routine" ~workouts:[ ideal_day_one; ideal_day_two; ideal_day_three ]