diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,9 @@
+commutative
+===========
+
+> Semantics for commutative operations in Haskell
+
+## Idea
+
+There isn't a class for commutative binary operations, and this is a joke attempt
+at making one.
diff --git a/commutative.cabal b/commutative.cabal
--- a/commutative.cabal
+++ b/commutative.cabal
@@ -1,46 +1,65 @@
-Name:                   commutative
-Version:                0.0.1.4
-Author:                 Athan Clark <athan.clark@gmail.com>
-Maintainer:             Athan Clark <athan.clark@gmail.com>
-License:                MIT
-License-File:           LICENSE
-Synopsis:               Commutative binary operations.
-Description:
-  This package provides a trivial class for abelian binary operations, and an
-  analogue to @Data.Foldable@.
-Cabal-Version:          >= 1.10
-Build-Type:             Simple
-Category:               Data, Math
+cabal-version: 1.12
 
-Library
-  Default-Language:     Haskell2010
-  HS-Source-Dirs:       src
-  GHC-Options:          -Wall
-  Exposed-Modules:      Data.Commutative
-                        Data.Mergeable
-  Build-Depends:        base >= 4.6 && < 5
-                      , random
-                      , semigroups
+-- This file has been generated from package.yaml by hpack version 0.31.0.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: 8f796930aa20ab766d806a86a390a5cd89ed619ac06011638f5e905c7fb1df3f
 
-Test-Suite spec
-  Type:                 exitcode-stdio-1.0
-  Default-Language:     Haskell2010
-  Hs-Source-Dirs:       src
-                      , test
-  Ghc-Options:          -Wall
-  Main-Is:              Main.hs
-  Other-Modules:        Data.Commutative
-                        Data.CommutativeSpec
-                        Data.Mergeable
-  Build-Depends:        base
-                      , tasty
-                      , tasty-quickcheck
-                      , tasty-hunit
-                      , QuickCheck
-                      , quickcheck-instances
-                      , random
-                      , semigroups
+name:           commutative
+version:        0.0.2
+synopsis:       Commutative binary operations.
+description:    Please see the README on Github at <https://github.com/athanclark/commutative#readme>
+category:       Data
+homepage:       https://github.com/athanclark/commutative#readme
+bug-reports:    https://github.com/athanclark/commutative/issues
+author:         Athan Clark
+maintainer:     athan.clark@localcooking.com
+copyright:      2018 Athan Clark
+license:        BSD3
+license-file:   LICENSE
+build-type:     Simple
+extra-source-files:
+    README.md
 
-Source-Repository head
-  Type:                 git
-  Location:             https://github.com/athanclark/commutative.git
+source-repository head
+  type: git
+  location: https://github.com/athanclark/commutative
+
+library
+  exposed-modules:
+      Data.Commutative
+      Data.Mergeable
+  other-modules:
+      Paths_commutative
+  hs-source-dirs:
+      src
+  ghc-options: -Wall
+  build-depends:
+      base >=4.11 && <5.0
+    , random
+    , semigroups
+    , vector
+  default-language: Haskell2010
+
+test-suite sets-test
+  type: exitcode-stdio-1.0
+  main-is: Main.hs
+  other-modules:
+      Data.CommutativeSpec
+      Paths_commutative
+  hs-source-dirs:
+      test
+  ghc-options: -Wall -threaded -rtsopts -Wall -with-rtsopts=-N
+  build-depends:
+      QuickCheck
+    , base >=4.11 && <5.0
+    , commutative
+    , quickcheck-instances
+    , random
+    , semigroups
+    , tasty
+    , tasty-hunit
+    , tasty-quickcheck
+    , vector
+  default-language: Haskell2010
diff --git a/src/Data/Commutative.hs b/src/Data/Commutative.hs
--- a/src/Data/Commutative.hs
+++ b/src/Data/Commutative.hs
@@ -15,6 +15,7 @@
 import Control.Applicative
 import System.IO.Unsafe (unsafePerformIO)
 import System.Random (randomIO)
+import qualified Data.Vector as Vector
 
 
 class Commutative a where
diff --git a/src/Data/Mergeable.hs b/src/Data/Mergeable.hs
--- a/src/Data/Mergeable.hs
+++ b/src/Data/Mergeable.hs
@@ -7,6 +7,7 @@
 
 import Data.Commutative
 import Data.List.NonEmpty as NE
+import qualified Data.Vector as Vector
 
 
 class Mergeable t where
@@ -19,6 +20,11 @@
 instance Mergeable [] where
   mergeMap _ [] = cempty
   mergeMap f (x:xs) = f x <~> mergeMap f xs
+
+instance Mergeable Vector.Vector where
+  mergeMap f xss
+    | Vector.null xss = cempty
+    | otherwise = f (Vector.head xss) <~> mergeMap f (Vector.drop 1 xss)
 
 
 class Functor t => Mergeable1 t where
diff --git a/test/Data/CommutativeSpec.hs b/test/Data/CommutativeSpec.hs
--- a/test/Data/CommutativeSpec.hs
+++ b/test/Data/CommutativeSpec.hs
@@ -56,20 +56,20 @@
 instance Arbitrary a => Arbitrary (Under5 a) where
   arbitrary = Under5 <$> arbitrary `suchThat` (\x -> length x < 5)
 
-instance Arbitrary Any where
-  arbitrary = Any <$> arbitrary
+-- instance Arbitrary Any where
+--   arbitrary = Any <$> arbitrary
 
-instance Arbitrary All where
-  arbitrary = All <$> arbitrary
+-- instance Arbitrary All where
+--   arbitrary = All <$> arbitrary
 
 instance Arbitrary a => Arbitrary (OneOf a) where
   arbitrary = OneOf <$> arbitrary
 
-instance Arbitrary a => Arbitrary (Sum a) where
-  arbitrary = Sum <$> arbitrary
+-- instance Arbitrary a => Arbitrary (Sum a) where
+--   arbitrary = Sum <$> arbitrary
 
-instance Arbitrary a => Arbitrary (Product a) where
-  arbitrary = Product <$> arbitrary
+-- instance Arbitrary a => Arbitrary (Product a) where
+--   arbitrary = Product <$> arbitrary
 
 equal :: (Eq a, Foldable f) => f a -> Bool
 equal = maybe True snd
