Skip to content

Commit bdb06c9

Browse files
authored
Merge pull request #4445 from bulatkhabib/doctests-idt
Add doctest for `IdT`
2 parents 6daf274 + 0dd6ef2 commit bdb06c9

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

core/src/main/scala/cats/data/IdT.scala

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,86 @@ package data
2727
*/
2828
final case class IdT[F[_], A](value: F[A]) {
2929

30+
/**
31+
* Example:
32+
* {{{
33+
* scala> import cats.data.IdT
34+
*
35+
* scala> val idT: IdT[List, Int] = IdT(List(1, 2, 3))
36+
* scala> idT.map(_ + 1)
37+
* res0: IdT[List, Int] = IdT(List(2, 3, 4))
38+
* }}}
39+
*/
3040
def map[B](f: A => B)(implicit F: Functor[F]): IdT[F, B] =
3141
IdT(F.map(value)(f))
3242

3343
/**
3444
* Modify the context `F` using transformation `f`.
45+
*
46+
* Example:
47+
* {{{
48+
* scala> import cats.~>
49+
* scala> import cats.data.IdT
50+
*
51+
* scala> val vectorToList: Vector ~> List = new ~>[Vector, List] { override def apply[A](v: Vector[A]): List[A] = v.toList }
52+
* scala> val idT: IdT[Vector, Int] = IdT(Vector(1, 2, 3))
53+
* scala> idT.mapK[List](vectorToList)
54+
* res0: IdT[List, Int] = IdT(List(1, 2, 3))
55+
* }}}
3556
*/
3657
def mapK[G[_]](f: F ~> G): IdT[G, A] =
3758
IdT[G, A](f(value))
3859

60+
/**
61+
* Example:
62+
* {{{
63+
* scala> import cats.data.IdT
64+
*
65+
* scala> val idT: IdT[List, Int] = IdT(List(1, 2, 3))
66+
* scala> idT.flatMap(x => IdT(List(x + 1)))
67+
* res0: IdT[List, Int] = IdT(List(2, 3, 4))
68+
* }}}
69+
*/
3970
def flatMap[B](f: A => IdT[F, B])(implicit F: FlatMap[F]): IdT[F, B] =
4071
IdT(F.flatMap(value)(a => f(a).value))
4172

73+
/**
74+
* Example:
75+
* {{{
76+
* scala> import cats.data.IdT
77+
*
78+
* scala> val idT: IdT[List, Int] = IdT(List(1, 2, 3))
79+
* scala> idT.flatMapF(x => List(Option(x).filter(_ % 2 == 0)))
80+
* res0: IdT[List, Option[Int]] = IdT(List(None, Some(2), None))
81+
* }}}
82+
*/
4283
def flatMapF[B](f: A => F[B])(implicit F: FlatMap[F]): IdT[F, B] =
4384
IdT(F.flatMap(value)(f))
4485

86+
/**
87+
* Example:
88+
* {{{
89+
* scala> import cats.data.IdT
90+
*
91+
* scala> val idT: IdT[List, Int] = IdT(List(1, 2, 3))
92+
* scala> idT.foldLeft(0)((acc, x) => acc + x)
93+
* res0: Int = 6
94+
* }}}
95+
*/
4596
def foldLeft[B](b: B)(f: (B, A) => B)(implicit F: Foldable[F]): B =
4697
F.foldLeft(value, b)(f)
4798

99+
/**
100+
* Example:
101+
* {{{
102+
* scala> import cats.data.IdT
103+
* scala> import cats.Eval
104+
*
105+
* scala> val idT: IdT[List, Int] = IdT(List(1, 2, 3))
106+
* scala> idT.foldRight(Eval.Zero)((x, acc) => Eval.later(x + acc.value)).value
107+
* res0: Int = 6
108+
* }}}
109+
*/
48110
def foldRight[B](lb: Eval[B])(f: (A, Eval[B]) => Eval[B])(implicit F: Foldable[F]): Eval[B] =
49111
F.foldRight(value, lb)(f)
50112

@@ -54,6 +116,16 @@ final case class IdT[F[_], A](value: F[A]) {
54116
def reduceRightTo[B](f: A => B)(g: (A, Eval[B]) => Eval[B])(implicit F: Reducible[F]): Eval[B] =
55117
F.reduceRightTo(value)(f)(g)
56118

119+
/**
120+
* Example:
121+
* {{{
122+
* scala> import cats.data.IdT
123+
*
124+
* scala> val idT: IdT[List, Int] = IdT(List(1, 2, 3))
125+
* scala> idT.traverse[Option, Int](x => Option(x + 1))
126+
* res0: Option[IdT[List, Int]] = Some(IdT(List(2, 3, 4)))
127+
* }}}
128+
*/
57129
def traverse[G[_], B](f: A => G[B])(implicit F: Traverse[F], G: Applicative[G]): G[IdT[F, B]] =
58130
G.map(F.traverse(value)(f))(IdT(_))
59131

0 commit comments

Comments
 (0)