@@ -0,0 +1,825 @@
+package ktak.functionaljava;%0A%0Apublic abstract class Option%3CT%3E %7B%0A    %0A    public abstract %3CR%3E R visit(Visitor%3CR,T%3E visitor);%0A    %0A    public static interface Visitor%3CR,T%3E %7B%0A        public R visitNone();%0A        public R visitSome(T value);%0A    %7D%0A    %0A    public static class None%3CT%3E extends Option%3CT%3E %7B%0A        %0A        @Override%0A        public %3CR%3E R visit(ktak.functionaljava.Option.Visitor%3CR, T%3E visitor) %7B%0A            return visitor.visitNone();%0A        %7D%0A        %0A    %7D%0A    %0A    public static class Some%3CT%3E extends Option%3CT%3E %7B%0A        %0A        private final T val;%0A        %0A        public Some(T val) %7B%0A            this.val = val;%0A        %7D%0A        %0A        @Override%0A        public %3CR%3E R visit(ktak.functionaljava.Option.Visitor%3CR, T%3E visitor) %7B%0A            return visitor.visitSome(val);%0A        %7D%0A        %0A    %7D%0A    %0A%7D%0A

add Option type