Repository: kevincianfarini/cardiologist (kotlin)

Issue:
Expose a `Pulse.beat` function without lambda parameters.
```kt
pulse.beat { // Note the lack of scheduled and occurred parameters. 
  println("foo)
}
```

Pull request:
Closes #104

Patch:
diff --git a/README.md b/README.md
index 63c131f..80ab6d6 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ through several different functions exposed on a `kotlinx.datetime.Clock`.
 
 Cardiologist offers two functions to schedule fixed period schedules using a `kotlin.time.Duration` and a 
 `kotlinx.datetime.DateTimePeriod`. Fixed period Pulses are rigid and the period specifies the time between the start 
-of a job and the start of its successor. Interval schedules are intentioanlly omitted from Cardiologist because 
+of a job and the start of its successor. Interval schedules are intentionally omitted from Cardiologist because 
 they can be trivially built with a while loop. 
 
 ```kt
@@ -106,12 +106,12 @@ skipped.
 
 ```kt
 // Cancels slow jobs. 
-clock.fixedPeriodPulse(5.seconds).beat(strategy = PulseBackpressureStrategy.CancelPrevious) { _, _ ->
+clock.fixedPeriodPulse(5.seconds).beat(strategy = PulseBackpressureStrategy.CancelPrevious) { 
     mySlowSuspendingFunction()
 }
 
 // Skips new jobs until this slow job completes. 
-clock.fixedPeriodPulse(5.seconds).beat(strategy = PulseBackpressureStrategy.SkipNext) { _, _ ->
+clock.fixedPeriodPulse(5.seconds).beat(strategy = PulseBackpressureStrategy.SkipNext) { 
     mySlowSuspendingFunction()
 }
 ```
@@ -201,4 +201,4 @@ fun main() = runBlocking { // this: CoroutineScope
 ```
 
 Cron runs as its own process and will launch your program as a separate processes. This is outside the scope of 
-Cadiologist's goals.
\ No newline at end of file
+Cardiologist's goals.
\ No newline at end of file
diff --git a/src/commonMain/kotlin/io/github/kevincianfarini/cardiologist/Pulse.kt b/src/commonMain/kotlin/io/github/kevincianfarini/cardiologist/Pulse.kt
index 886c598..fc290b3 100644
--- a/src/commonMain/kotlin/io/github/kevincianfarini/cardiologist/Pulse.kt
+++ b/src/commonMain/kotlin/io/github/kevincianfarini/cardiologist/Pulse.kt
@@ -34,12 +34,12 @@ public value class Pulse internal constructor(private val flow: Flow<Pair<Instan
      * Invoke [action] every time this Pulse is set to execute. [Action][action] provides two [instants][Instant]
      * denoting when the pulse was scheduled to occur, and when it actually occurred.
      *
-     * This operator will execute [action] according to which [mode] is specified.
+     * This operator will execute [action] according to which [strategy] is specified.
      */
     public suspend fun beat(
-        mode: PulseBackpressureStrategy = PulseBackpressureStrategy.ExecuteConcurrently,
+        strategy: PulseBackpressureStrategy = PulseBackpressureStrategy.ExecuteConcurrently,
         action: suspend (scheduled: Instant, occurred: Instant) -> Unit,
-    ): Unit = when (mode) {
+    ): Unit = when (strategy) {
         PulseBackpressureStrategy.CancelPrevious -> flow.collectLatest { (scheduled, occurred) ->
             action(scheduled, occurred)
         }
@@ -52,4 +52,14 @@ public value class Pulse internal constructor(private val flow: Flow<Pair<Instan
             action(scheduled, occurred)
         }
     }
+
+    /**
+     * Invoke [action] every time this Pulse is set to execute.
+     *
+     * This operator will execute [action] according to which [strategy] is specified.
+     */
+    public suspend fun beat(
+        strategy: PulseBackpressureStrategy = PulseBackpressureStrategy.ExecuteConcurrently,
+        action: suspend () -> Unit,
+    ): Unit = beat(strategy) { _, _, -> action }
 }
\ No newline at end of file


Test patch:
diff --git a/src/commonTest/kotlin/io/github/kevincianfarini/cardiologist/PulseTests.kt b/src/commonTest/kotlin/io/github/kevincianfarini/cardiologist/PulseTests.kt
index db122d3..7a6fddc 100644
--- a/src/commonTest/kotlin/io/github/kevincianfarini/cardiologist/PulseTests.kt
+++ b/src/commonTest/kotlin/io/github/kevincianfarini/cardiologist/PulseTests.kt
@@ -16,7 +16,7 @@ class PulseTests {
         assertEquals(
             expected = 5.seconds,
             actual = testTimeSource.measureTime {
-                testClock.fixedPeriodPulse(5.seconds).take(1).beat { _, _ -> }
+                testClock.fixedPeriodPulse(5.seconds).take(1).beat { }
             }
         )
     }
@@ -25,7 +25,7 @@ class PulseTests {
         val pulse = testClock.fixedPeriodPulse(DateTimePeriod(seconds = 5), TimeZone.UTC).take(1)
         assertEquals(
             expected = 5.seconds,
-            actual = testTimeSource.measureTime { pulse.beat { _, _ -> } }
+            actual = testTimeSource.measureTime { pulse.beat { } }
         )
     }