// Path: src/main/java/com/shapesecurity/functional/Unit.java
// public final class Unit {
//     public final static Unit unit = new Unit();
// 
//     private Unit() {
//     }
// }


import com.shapesecurity.functional.Unit;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull;
    }

    class StringConcat implements Semigroup<String> {
        protected StringConcat() {
        }

        @Nonnull
        @Override
        public final String append(String a, String b) {
            return a + b;
        }
    }

    class BooleanOr implements Semigroup<Boolean> {
        protected BooleanOr() {
        }

        @Nonnull
        @Override
        public final Boolean append(Boolean a, Boolean b) {
            return a || b;
        }
    }

    class BooleanAnd implements Semigroup<Boolean> {
        protected BooleanAnd() {
        }

        @Nonnull
        @Override
// Path: src/main/java/com/shapesecurity/functional/Unit.java
// public final class Unit {
//     public final static Unit unit = new Unit();
// 
//     private Unit() {
//     }
// }


// Path: src/main/java/com/shapesecurity/functional/data/Semigroup.java
import com.shapesecurity.functional.Unit;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull;

    }

    class StringConcat implements Semigroup<String> {
        protected StringConcat() {
        }

        @Nonnull
        @Override
        public final String append(String a, String b) {
            return a + b;
        }
    }

    class BooleanOr implements Semigroup<Boolean> {
        protected BooleanOr() {
        }

        @Nonnull
        @Override
        public final Boolean append(Boolean a, Boolean b) {
            return a || b;
        }
    }

    class BooleanAnd implements Semigroup<Boolean> {
        protected BooleanAnd() {
        }

        @Nonnull
        @Override
        public final Boolean append(Boolean a, Boolean b) {