Skip to content

Commit 71214d3

Browse files
JonWoolwinejnape
authored andcommitted
Adding MaybeT::filter
1 parent 476f101 commit 71214d3

File tree

2 files changed

+20
-0
lines changed
  • src
    • main/java/com/jnape/palatable/lambda/monad/transformer/builtin
    • test/java/com/jnape/palatable/lambda/monad/transformer/builtin

2 files changed

+20
-0
lines changed

src/main/java/com/jnape/palatable/lambda/monad/transformer/builtin/MaybeT.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ public <MMA extends MonadRec<Maybe<A>, M>> MMA runMaybeT() {
4444
return mma.coerce();
4545
}
4646

47+
/**
48+
* If the embedded value is present and satisfies <code>predicate</code>
49+
* then return <code>just</code> the embedded value
50+
*
51+
* @param predicate the predicate to apply to the embedded value
52+
* @return maybe the satisfied value embedded under M
53+
*/
54+
public MaybeT<M, A> filter(Fn1<? super A, ? extends Boolean> predicate) {
55+
return maybeT(mma.fmap(ma -> ma.filter(predicate)));
56+
}
57+
4758
/**
4859
* {@inheritDoc}
4960
*/

src/test/java/com/jnape/palatable/lambda/monad/transformer/builtin/MaybeTTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import static com.jnape.palatable.lambda.adt.Either.right;
2323
import static com.jnape.palatable.lambda.adt.Maybe.just;
2424
import static com.jnape.palatable.lambda.adt.Maybe.nothing;
25+
import static com.jnape.palatable.lambda.functions.builtin.fn2.GT.gt;
26+
import static com.jnape.palatable.lambda.functions.builtin.fn2.LT.lt;
2527
import static com.jnape.palatable.lambda.functor.builtin.Identity.pureIdentity;
2628
import static com.jnape.palatable.lambda.functor.builtin.Lazy.lazy;
2729
import static com.jnape.palatable.lambda.io.IO.io;
@@ -70,4 +72,11 @@ public void composedZip() {
7072
.unsafePerformAsyncIO(Executors.newFixedThreadPool(2))
7173
.join();
7274
}
75+
76+
@Test
77+
public void filter() {
78+
MaybeT<Identity<?>, Integer> maybeT = pureMaybeT(pureIdentity()).apply(1);
79+
assertEquals(maybeT(new Identity<>(just(1))), maybeT.filter(gt(0)));
80+
assertEquals(maybeT(new Identity<>(nothing())), maybeT.filter(lt(0)));
81+
}
7382
}

0 commit comments

Comments
 (0)