diff --git a/Data/Either/Both.hs b/Data/Either/Both.hs
--- a/Data/Either/Both.hs
+++ b/Data/Either/Both.hs
@@ -8,6 +8,12 @@
 data Either' a b = JustLeft a | JustRight b | Both a b
   deriving (Read, Show)
 
+either' :: (a -> c) -> (b -> c) -> (a -> b -> c) -> Either' a b -> c
+either' f g h = \ case
+    JustLeft a -> f a
+    JustRight b -> g b
+    Both a b -> h a b
+
 instance Bifunctor Either' where
     bimap f g = \ case JustLeft a -> JustLeft (f a)
                        JustRight b -> JustRight (g b)
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/either-both.cabal b/either-both.cabal
--- a/either-both.cabal
+++ b/either-both.cabal
@@ -1,5 +1,5 @@
 name:                either-both
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            Either or both
 -- description:
 license:             BSD3
@@ -16,6 +16,32 @@
   hs-source-dirs:      .
   exposed-modules:     Data.Either.Both
   build-depends:       base >= 4.7 && < 5
+  default-language:    Haskell2010
+  default-extensions:  UnicodeSyntax
+                     , LambdaCase
+                     , InstanceSigs
+                     , PartialTypeSignatures
+                     , PolyKinds
+                     , ConstraintKinds
+                     , FlexibleContexts
+                     , FlexibleInstances
+                     , StandaloneDeriving
+                     , DeriveFunctor
+                     , DeriveFoldable
+                     , DeriveTraversable
+                     , OverloadedStrings
+  ghc-options:         -Wall -Wcompat -Wredundant-constraints -Wno-name-shadowing
+                       -Wincomplete-record-updates -Wincomplete-uni-patterns
+
+test-suite test
+  type:                exitcode-stdio-1.0
+  hs-source-dirs:      test
+  main-is:             Main.hs
+  build-depends:       base >=4.11 && <5
+                     , smallcheck >=1.1.3
+                     , tasty >=1.0
+                     , tasty-smallcheck >=0.8
+                     , either-prime
   default-language:    Haskell2010
   default-extensions:  UnicodeSyntax
                      , LambdaCase
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,8 @@
+module Main where
+
+import Test.SmallCheck
+import Test.Tasty
+import Test.Tasty.SmallCheck
+
+main :: IO ()
+main = pure ()
