diff --git a/Data/Monoid/Record.hs b/Data/Monoid/Record.hs
new file mode 100644
--- /dev/null
+++ b/Data/Monoid/Record.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances #-}
+module Data.Monoid.Record where
+
+import Data.Monoid                        ( Any(..), Last(..), Monoid(..) )
+
+add :: Monoid m => (a -> m) -> (m -> a -> a) -> m -> a -> a
+add getter setter x y = setter (getter y `mappend` x) y
+
+class Monoid m => Wrapper m a | m -> a where
+    wrap :: a -> m
+    addP :: (b -> m) -> (m -> b -> b) -> a -> b -> b
+    addP getter setter = add getter setter . wrap
+
+instance Wrapper Any Bool where
+    wrap = Any
+
+instance Wrapper (Last a) a where
+    wrap = Last . return
+
+instance Wrapper [a] [a] where
+    wrap = id
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,35 @@
+Copyright (c) 2009, Robin Green
+All rights reserved.
+
+Redistribution and use in source and binary forms,
+with or without modification, are permitted provided
+that the following conditions are met:
+
+    * Redistributions of source code must retain
+      the above copyright notice, this list of
+      conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce
+      the above copyright notice, this list of
+      conditions and the following disclaimer in the
+      documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Robin Green nor the
+      names of other contributors may be used to
+      endorse or promote products derived from this
+      software without specific prior written permission.
+
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+> import Distribution.Simple
+> main = defaultMain
diff --git a/monoid-record.cabal b/monoid-record.cabal
new file mode 100644
--- /dev/null
+++ b/monoid-record.cabal
@@ -0,0 +1,24 @@
+Name:          monoid-record
+Version:       0.1
+Cabal-version: >= 1.6
+License:       BSD3
+License-file:  LICENSE
+Maintainer:    Robin Green <greenrd@greenrd.org>
+Build-type:    Simple
+Copyright:     2009 Robin Green
+Category:      Data
+Synopsis:      Support for modifying record fields of monoidal type
+Description:   Small module with utility function and class for modifying record fields
+               of a monoidal type.
+Bug-reports:   mailto:greenrd@greenrd.org
+Stability:     experimental
+Tested-with:   GHC == 6.10.2
+
+Source-repository head
+    Type:      darcs
+    Location:  http://patch-tag.com/publicrepos/monoid-record
+
+Library
+    Build-depends:   base
+    Exposed-modules: Data.Monoid.Record
+    GHC-options:     -Wall
