fork download
  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 final 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. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:26: error: class MonadApp is public, should be declared in a file named MonadApp.java
public class MonadApp {
       ^
1 error
stdout
Standard output is empty