@@ -44,6 +44,9 @@ package kategory
44
44
inline fun <reified F > foldable (FFF : Foldable <F > = kategory.foldable<F >()): OptionTFoldableInstance <F > =
45
45
OptionTFoldableInstanceImplicits .instance(FFF )
46
46
47
+ inline fun <reified F > traverseFilter (TF : TraverseFilter <F > = kategory.traverseFilter<F >()): OptionTTraverseFilterInstance <F > =
48
+ OptionTTraverseFilterInstanceImplicits .instance(TF )
49
+
47
50
inline fun <reified F > traverse (TF : Traverse <F > = kategory.traverse<F >()): OptionTTraverseInstance <F > =
48
51
OptionTTraverseInstanceImplicits .instance(TF )
49
52
@@ -62,7 +65,7 @@ package kategory
62
65
63
66
inline fun <B > cata (crossinline default : () -> B , crossinline f : (A ) -> B , FF : Functor <F >): HK <F , B > = fold(default, f, FF )
64
67
65
- fun <B > ap (ff : OptionTKind <F , (A ) - > B >, MF : Monad <F >): OptionT <F , B > = ff.ev().flatMap ({ f -> map(f, MF ) }, MF )
68
+ fun <B > ap (ff : OptionTKind <F , (A ) - > B >, MF : Monad <F >): OptionT <F , B > = ff.ev().flatMap({ f -> map(f, MF ) }, MF )
66
69
67
70
inline fun <B > flatMap (crossinline f : (A ) -> OptionT <F , B >, MF : Monad <F >): OptionT <F , B > = flatMapF({ it -> f(it).value }, MF )
68
71
@@ -105,6 +108,11 @@ package kategory
105
108
106
109
fun <B > foldR (lb : Eval <B >, f : (A , Eval <B >) -> Eval <B >, FF : Foldable <F >): Eval <B > = FF .compose(Option .foldable()).foldRC(value, lb, f)
107
110
111
+ fun <G , B > traverseFilter (f : (A ) -> HK <G , Option <B >>, GA : Applicative <G >, FF : Traverse <F >): HK <G , OptionT <F , B >> {
112
+ val fa = ComposedTraverseFilter (FF , Option .traverseFilter(), Option .applicative()).traverseFilterC(value, f, GA )
113
+ return GA .map(fa, { OptionT (FF .map(it.unnest(), { it.ev() })) })
114
+ }
115
+
108
116
fun <G , B > traverse (f : (A ) -> HK <G , B >, GA : Applicative <G >, FF : Traverse <F >): HK <G , OptionT <F , B >> {
109
117
val fa = ComposedTraverse (FF , Option .traverse(), Option .applicative()).traverseC(value, f, GA )
110
118
return GA .map(fa, { OptionT (FF .map(it.unnest(), { it.ev() })) })
0 commit comments