diff --git a/BasicPrelude.hs b/BasicPrelude.hs
new file mode 100644
--- /dev/null
+++ b/BasicPrelude.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+module BasicPrelude
+    ( -- * Standard
+      -- ** Operators
+      (Prelude.$)
+    , (Prelude.&&)
+    , (Prelude.||)
+    , (Control.Category..)
+      -- ** Functions
+    , Prelude.not
+    , Prelude.otherwise
+    , Prelude.fst
+    , Prelude.snd
+    , Control.Category.id
+    , Prelude.maybe
+    , Prelude.either
+    , Prelude.flip
+    , Prelude.const
+    , Prelude.error
+    , Prelude.zip
+    , Prelude.unzip
+    , Prelude.zipWith
+    , Prelude.or
+    , Data.Text.IO.putStrLn
+    , Prelude.elem
+    , Prelude.odd
+    , Prelude.even
+    , Prelude.uncurry
+      -- ** Type classes
+    , Prelude.Ord (..)
+    , Prelude.Eq (..)
+    , Prelude.Enum (..)
+    , Prelude.Show
+    , Prelude.Functor (..)
+    , Prelude.Monad (..)
+    , (Control.Monad.=<<)
+      -- ** Numeric type classes
+    , Prelude.Num (..)
+    , Prelude.Real (..)
+    , Prelude.Integral (..)
+    , Prelude.Fractional (..)
+    , Prelude.Floating (..)
+    , Prelude.RealFrac (..)
+    , Prelude.RealFloat(..)
+      -- ** Data types
+    , Prelude.Maybe (..)
+    , Prelude.Ordering (..)
+    , Prelude.Bool (..)
+    , Prelude.Char
+    , Prelude.IO
+    , Prelude.Either (..)
+      -- * Re-exports
+      -- ** Packed reps
+    , ByteString
+    , LByteString
+    , Text
+    , LText
+      -- ** Containers
+    , Map
+    , HashMap
+    , Set
+    , HashSet
+    , Vector
+    , Hashable
+      -- ** Numbers
+    , Word
+    , Word8
+    , Word64
+    , Prelude.Int
+    , Int64
+    , Prelude.Integer
+    , Prelude.Rational
+    , Prelude.Float
+    , Prelude.Double
+      -- ** Numeric functions
+    , (Prelude.^)
+    , (Prelude.^^)
+    , Prelude.subtract
+    , Prelude.fromIntegral
+    , Prelude.realToFrac
+      -- ** Monoids
+    , Monoid (..)
+    , concat
+    , (++)
+      -- ** Arrow
+    , Control.Arrow.first
+    , Control.Arrow.second
+    , (Control.Arrow.***)
+    , (Control.Arrow.&&&)
+      -- ** Maybe
+    , Data.Maybe.mapMaybe
+    , Data.Maybe.catMaybes
+    , Data.Maybe.fromMaybe
+      -- ** Either
+    , Data.Either.partitionEithers
+      -- ** Applicative
+    , Control.Applicative.Applicative (..)
+    , (Control.Applicative.<$>)
+      -- ** Monad
+    , (Control.Monad.>=>)
+      -- ** Transformers
+    , Control.Monad.Trans.Class.lift
+    , Control.Monad.IO.Class.MonadIO
+    , Control.Monad.IO.Class.liftIO
+      -- ** Exceptions
+    , Control.Exception.Exception (..)
+    , Control.Exception.SomeException
+    , Control.Exception.throwIO
+      -- ** Files
+    , F.FilePath
+    , (F.</>)
+    , (F.<.>)
+    , F.hasExtension
+    , F.basename
+    , F.filename
+      -- ** Print
+    , Prelude.print
+    ) where
+
+import qualified Prelude
+import Prelude (Char, (.))
+
+import Data.Hashable (Hashable)
+
+import Data.Monoid (Monoid (..))
+import qualified Control.Arrow
+import qualified Control.Applicative
+import qualified Control.Category
+import qualified Control.Monad
+import qualified Control.Exception
+
+import qualified Filesystem.Path.CurrentOS as F
+
+import Data.Word (Word8, Word64, Word)
+import Data.Int (Int64)
+
+import qualified Data.Text.IO
+
+import qualified Data.Maybe
+import qualified Data.Either
+
+import qualified Control.Monad.Trans.Class
+import qualified Control.Monad.IO.Class
+
+import Data.ByteString (ByteString)
+import qualified Data.ByteString.Lazy
+import Data.Text (Text)
+import qualified Data.Text.Lazy
+import Data.Vector (Vector)
+import Data.Map (Map)
+import Data.Set (Set)
+import Data.HashMap.Strict (HashMap)
+import Data.HashSet (HashSet)
+
+type LText = Data.Text.Lazy.Text
+type LByteString = Data.ByteString.Lazy.ByteString
+
+concat :: Monoid w => [w] -> w
+concat = mconcat
+
+infixr 5  ++
+(++) :: Monoid w => w -> w -> w
+(++) = mappend
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/basic-prelude.cabal b/basic-prelude.cabal
new file mode 100644
--- /dev/null
+++ b/basic-prelude.cabal
@@ -0,0 +1,29 @@
+name:                basic-prelude
+version:             0.1.0.0
+synopsis:            An enhanced core prelude, meant for building up more complete preludes on top of.
+
+homepage:            https://github.com/snoyberg/basic-prelude
+license:             MIT
+license-file:        LICENSE
+author:              Michael Snoyman
+maintainer:          michael@snoyman.com
+
+category:            Control
+build-type:          Simple
+cabal-version:       >=1.8
+
+library
+  exposed-modules:     BasicPrelude
+  build-depends:       base                     >= 4       && < 5
+                     , hashable
+                     , bytestring
+                     , text
+                     , transformers
+                     , containers
+                     , unordered-containers
+                     , vector
+                     , system-filepath          >= 0.4     && < 0.5
+
+source-repository head
+  type:     git
+  location: git://github.com/snoyberg/basic-prelude.git
