Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.69 KB | None | 0 0
  1. import java.util.function.Function;
  2.  
  3. interface Monad<T> {
  4.     public <U> Monad<U> bind(Function<T, Monad<U>> f);
  5. }
  6.  
  7. class Maybe<T> implements Monad<T> {
  8.     public Maybe(T val) {
  9.         this.val = val;
  10.     }
  11.    
  12.     public T getVal() {
  13.         return val;
  14.     }
  15.    
  16.     @Override
  17.     public <U> Monad<U> bind(Function<T, Monad<U>> f) {
  18.         if (val == null)
  19.             return new Maybe<U>(null);
  20.         return f.apply(val);
  21.     }
  22.    
  23.     private T val;
  24. }
  25.  
  26. public class MonadApp {
  27.     public static void main(String[] args) {
  28.         Maybe<Integer> x = new Maybe<>(5);
  29.         Monad<Integer> y = x.bind(v -> new Maybe<Integer>(v+1))
  30.                             .bind(v -> new Maybe<Integer>(v*2));
  31.         System.out.println( ((Maybe<Integer>)y).getVal() );
  32.     }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement