@@ -27,24 +27,86 @@ package data
27
27
*/
28
28
final case class IdT [F [_], A ](value : F [A ]) {
29
29
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
+ */
30
40
def map [B ](f : A => B )(implicit F : Functor [F ]): IdT [F , B ] =
31
41
IdT (F .map(value)(f))
32
42
33
43
/**
34
44
* 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
+ * }}}
35
56
*/
36
57
def mapK [G [_]](f : F ~> G ): IdT [G , A ] =
37
58
IdT [G , A ](f(value))
38
59
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
+ */
39
70
def flatMap [B ](f : A => IdT [F , B ])(implicit F : FlatMap [F ]): IdT [F , B ] =
40
71
IdT (F .flatMap(value)(a => f(a).value))
41
72
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
+ */
42
83
def flatMapF [B ](f : A => F [B ])(implicit F : FlatMap [F ]): IdT [F , B ] =
43
84
IdT (F .flatMap(value)(f))
44
85
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
+ */
45
96
def foldLeft [B ](b : B )(f : (B , A ) => B )(implicit F : Foldable [F ]): B =
46
97
F .foldLeft(value, b)(f)
47
98
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
+ */
48
110
def foldRight [B ](lb : Eval [B ])(f : (A , Eval [B ]) => Eval [B ])(implicit F : Foldable [F ]): Eval [B ] =
49
111
F .foldRight(value, lb)(f)
50
112
@@ -54,6 +116,16 @@ final case class IdT[F[_], A](value: F[A]) {
54
116
def reduceRightTo [B ](f : A => B )(g : (A , Eval [B ]) => Eval [B ])(implicit F : Reducible [F ]): Eval [B ] =
55
117
F .reduceRightTo(value)(f)(g)
56
118
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
+ */
57
129
def traverse [G [_], B ](f : A => G [B ])(implicit F : Traverse [F ], G : Applicative [G ]): G [IdT [F , B ]] =
58
130
G .map(F .traverse(value)(f))(IdT (_))
59
131
0 commit comments