 // License for the specific language governing permissions and limitations under
 // the License.
 
-/// Learning rate schedule.
+/// Learning rate schedule that takes a learning rate as input, along with the current training
+/// step and returns a modified learning rate (e.g., decayed).
 public protocol LearningRateSchedule {
   associatedtype Scalar: FloatingPoint
 

}

extension LearningRateSchedule {
  public func composed<Schedule: LearningRateSchedule>(
    with other: Schedule
  ) -> ComposedLearningRateSchedule<Self, Schedule> {

  }
}

/// Composed learning rate schedule.
///
/// This schedule transforms the provided learning rates as follows:
/// ```
/// schedule1(step: step, learningRate: schedule2(step: step, learningRate: learningRate))
/// ```
public struct ComposedLearningRateSchedule<
  Schedule1: LearningRateSchedule,
  Schedule2: LearningRateSchedule
