Skip to content

Commit

Permalink
Merge pull request #1242 from geny200/feature/lift
Browse files Browse the repository at this point in the history
feature: Add clockForKleisli and sleepForKleisli
  • Loading branch information
dos65 authored Apr 17, 2024
2 parents 9118a62 + 3edb39c commit a972f14
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 2 deletions.
5 changes: 5 additions & 0 deletions modules/core/ce2/src/test/scala/tofu/time/TimeSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,9 @@ class TimeSuite {
Sleep[ReaderT[IO, Unit, _]]
Timeout[ReaderT[IO, Unit, _]]
}

def readerF[F[_]: Clock: Sleep] = {
Clock[ReaderT[F, Unit, _]]
Sleep[ReaderT[F, Unit, _]]
}
}
5 changes: 5 additions & 0 deletions modules/core/ce3/src/test/scala/tofu/time/TimeSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,9 @@ class TimeSuite {
Sleep[ReaderT[IO, Unit, _]]
Timeout[ReaderT[IO, Unit, _]]
}

def readerF[F[_]: Clock: Sleep] = {
Clock[ReaderT[F, Unit, _]]
Sleep[ReaderT[F, Unit, _]]
}
}
13 changes: 12 additions & 1 deletion modules/kernel/src/main/scala/tofu/time/Clock.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package tofu.time

import java.util.concurrent.TimeUnit

import cats.data.Kleisli
import tofu.internal.EffectComp
import tofu.internal.instances.ClockInstance

Expand All @@ -21,4 +22,14 @@ trait Clock[F[_]] {
def nanos: F[Long]
}

object Clock extends EffectComp[Clock] with ClockInstance
object Clock extends EffectComp[Clock] with ClockInstance {
implicit def clockForKleisli[F[_], R](implicit clock: Clock[F]): Clock[Kleisli[F, R, *]] =
new Clock[Kleisli[F, R, *]] {

override def realTime(unit: TimeUnit): Kleisli[F, R, Long] =
Kleisli.liftF(clock.realTime(unit))

override def nanos: Kleisli[F, R, Long] =
Kleisli.liftF(clock.nanos)
}
}
6 changes: 5 additions & 1 deletion modules/kernel/src/main/scala/tofu/time/Sleep.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tofu.time

import scala.concurrent.duration.FiniteDuration
import cats.data.Kleisli
import tofu.internal.EffectComp
import tofu.internal.instances.SleepInstance

Expand All @@ -11,4 +12,7 @@ trait Sleep[F[_]] {
def sleep(duration: FiniteDuration): F[Unit]
}

object Sleep extends SleepInstance with EffectComp[Sleep]
object Sleep extends SleepInstance with EffectComp[Sleep] {
implicit def sleepForKleisli[F[_], R](implicit s: Sleep[F]): Sleep[Kleisli[F, R, *]] =
(duration: FiniteDuration) => Kleisli.liftF(s.sleep(duration))
}

0 comments on commit a972f14

Please sign in to comment.