diff --git a/Text/JSON/ToJson.hs b/Text/JSON/ToJson.hs
new file mode 100644
--- /dev/null
+++ b/Text/JSON/ToJson.hs
@@ -0,0 +1,67 @@
+module Text.JSON.ToJson (ToJson(..)) where
+
+import qualified Data.JSON.Types as J
+import Data.Int (Int32)
+import qualified Data.ByteString as S
+import qualified Data.ByteString.Lazy as LBS
+
+import Data.Text.Encoding.Error (lenientDecode)
+
+import qualified Data.Text as TS
+import qualified Data.Text.Encoding as TSE
+
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.Encoding as TLE
+
+import Data.Int (Int64)
+
+class ToJson a where
+  toJson :: a -> J.Value
+
+  toJsons :: [a] -> J.Value
+  toJsons = J.ValueArray . map toJson
+
+instance ToJson a => ToJson [a] where
+  toJson = toJsons
+
+instance ToJson () where
+  toJson _ = J.ValueArray []
+
+instance (ToJson a, ToJson b) => ToJson (a,b) where
+  toJson (a,b) = J.ValueArray [ toJson a, toJson b ]
+
+instance (ToJson a, ToJson b, ToJson c) => ToJson (a,b,c) where
+  toJson (a,b,c) = J.ValueArray [ toJson a, toJson b, toJson c ]
+
+instance (ToJson a, ToJson b, ToJson c, ToJson d) => ToJson (a,b,c,d) where
+  toJson (a,b,c,d) = J.ValueArray [toJson a, toJson b, toJson c, toJson d]
+
+instance ToJson J.Value where
+    toJson = id
+
+instance ToJson Bool where
+  toJson = J.ValueAtom . J.AtomBoolean
+
+instance ToJson Char where
+  toJson c = J.ValueAtom $ J.AtomText $ TL.pack (c:[])
+  toJsons  = J.ValueAtom . J.AtomText . TL.pack
+
+instance (ToJson S.ByteString) where
+  toJson = J.ValueAtom . J.AtomText . TL.fromChunks . return
+         . TSE.decodeUtf8With lenientDecode
+instance (ToJson LBS.ByteString) where
+  toJson = J.ValueAtom . J.AtomText . TLE.decodeUtf8With lenientDecode
+instance ToJson TS.Text where
+  toJson = J.ValueAtom . J.AtomText . TL.fromChunks . return
+instance ToJson TL.Text where
+  toJson = J.ValueAtom . J.AtomText
+instance (ToJson Int32) where
+  toJson = J.ValueAtom . J.AtomNumber . toRational
+instance (ToJson Int64) where
+  toJson = J.ValueAtom . J.AtomNumber . toRational
+instance (ToJson Int) where
+  toJson = J.ValueAtom . J.AtomNumber . toRational
+instance (ToJson Float) where
+  toJson = J.ValueAtom . J.AtomNumber . toRational
+instance (ToJson Double) where
+  toJson = J.ValueAtom . J.AtomNumber . toRational
diff --git a/json-enumerator.cabal b/json-enumerator.cabal
--- a/json-enumerator.cabal
+++ b/json-enumerator.cabal
@@ -1,5 +1,5 @@
 name:            json-enumerator
-version:         0.0.0
+version:         0.0.1
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michaels@suite-sol.com>
@@ -24,6 +24,7 @@
                    , blaze-builder-enumerator  >= 0.2      && < 0.3
                    , transformers              >= 0.2      && < 0.3
     exposed-modules: Text.JSON.Enumerator
+                     Text.JSON.ToJson
     ghc-options:     -Wall
 
 source-repository head
