Skip to content

Commit

Permalink
add Local[F, Span[F]] instance where F is Kleisli[F, Span[F], *]
Browse files Browse the repository at this point in the history
  • Loading branch information
bpholt committed Jan 27, 2023
1 parent ab95b63 commit 5d836f5
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions modules/mtl/shared/src/main/scala/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

package natchez

import cats._
import cats.data.Kleisli
import cats.mtl.Local
import cats.effect.{Trace => _, _}

Expand All @@ -13,4 +15,23 @@ package object mtl {
eb: MonadCancel[F, Throwable]
): Trace[F] =
new LocalTrace(ev)

implicit def localSpanForKleisli[F[_]](implicit
F: MonadCancel[F, _]
): Local[Kleisli[F, Span[F], *], Span[Kleisli[F, Span[F], *]]] =
new Local[Kleisli[F, Span[F], *], Span[Kleisli[F, Span[F], *]]] {
override def local[A](
fa: Kleisli[F, Span[F], A]
)(f: Span[Kleisli[F, Span[F], *]] => Span[Kleisli[F, Span[F], *]]): Kleisli[F, Span[F], A] =
fa.local {
f.andThen(_.mapK(Kleisli.applyK(Span.noop[F])))
.compose(_.mapK(Kleisli.liftK))
}

override def applicative: Applicative[Kleisli[F, Span[F], *]] =
Kleisli.catsDataApplicativeForKleisli

override def ask[E2 >: Span[Kleisli[F, Span[F], *]]]: Kleisli[F, Span[F], E2] =
Kleisli.ask[F, Span[F]].map(_.mapK(Kleisli.liftK))
}
}

0 comments on commit 5d836f5

Please sign in to comment.