Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.function.Function;
- interface Monad<T> {
- public <U> Monad<U> bind(Function<T, Monad<U>> f);
- }
- class Maybe<T> implements Monad<T> {
- public Maybe(T val) {
- this.val = val;
- }
- public T getVal() {
- return val;
- }
- @Override
- public <U> Monad<U> bind(Function<T, Monad<U>> f) {
- if (val == null)
- return new Maybe<U>(null);
- return f.apply(val);
- }
- private T val;
- }
- public class MonadApp {
- public static void main(String[] args) {
- Maybe<Integer> x = new Maybe<>(5);
- Monad<Integer> y = x.bind(v -> new Maybe<Integer>(v+1))
- .bind(v -> new Maybe<Integer>(v*2));
- System.out.println( ((Maybe<Integer>)y).getVal() );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement