diff --git a/json-api-lib.cabal b/json-api-lib.cabal
--- a/json-api-lib.cabal
+++ b/json-api-lib.cabal
@@ -1,7 +1,7 @@
 cabal-version:       2.0
 
 name:                json-api-lib
-version:             0.1.3.0
+version:             0.2.0.0
 homepage:            https://github.com/shirren/json-api-lib
 bug-reports:         https://github.com/shirren/json-api-lib/issues
 license:             MIT
diff --git a/src/Network/JSONApi.hs b/src/Network/JSONApi.hs
--- a/src/Network/JSONApi.hs
+++ b/src/Network/JSONApi.hs
@@ -26,13 +26,16 @@
 , R.mkRelationships
 , R.showLink
 , D.mkDocument
+, D.mkDocuments
 , D.mkDocument'
 , D.singleton
 , D.list
 , D.mkCompoundDocument
+, D.mkCompoundDocuments
 , D.mkCompoundDocument'
 , D.mkIncludedResource
 , D.mkSimpleDocument
+, D.mkSimpleDocuments
 , D.mkSimpleDocument'
 , M.mkMeta
 ) where
diff --git a/src/Network/JSONApi/Document.hs b/src/Network/JSONApi/Document.hs
--- a/src/Network/JSONApi/Document.hs
+++ b/src/Network/JSONApi/Document.hs
@@ -7,12 +7,15 @@
   , ErrorDocument (..)
   , Included
   , mkDocument
+  , mkDocuments
   , mkDocument'
   , mkSimpleDocument
+  , mkSimpleDocuments
   , mkSimpleDocument'
   , singleton
   , list
   , mkCompoundDocument
+  , mkCompoundDocuments
   , mkCompoundDocument'
   , mkIncludedResource
   ) where
@@ -92,16 +95,31 @@
 instance NFData Included
 
 {- |
-Constructor function for the Document data type.
+Constructor function for the Document data type which takes
+a list of Resourceful entities.
 
 See 'mkCompoundDocument' for constructing compound Document
 including 'side-loaded' resources
 -}
-mkDocument :: ResourcefulEntity a =>
+mkDocuments :: ResourcefulEntity a =>
               [a]
            -> Maybe Links
            -> Maybe Meta
            -> Document a
+mkDocuments res = mkDocument' (toResourceDataCollection res)
+
+{- |
+Constructor function for the Document data type which takes
+a single ResourcefulEntity.
+
+See 'mkCompoundDocument' for constructing compound Document
+including 'side-loaded' resources
+-}
+mkDocument :: ResourcefulEntity a =>
+              a
+           -> Maybe Links
+           -> Maybe Meta
+           -> Document a
 mkDocument res = mkDocument' (toResourceData res)
 
 mkDocument' :: ResourceData a
@@ -117,12 +135,20 @@
     }
 
 {- |
-A function for document which do not require links or Meta data.
+A function for a single resourceful entity and document which do not
+require links or Meta data.
 -}
-mkSimpleDocument :: ResourcefulEntity a => [a] -> Document a
+mkSimpleDocument :: ResourcefulEntity a => a -> Document a
 mkSimpleDocument res = mkDocument res Nothing Nothing
 
 {- |
+A function for a multiple resourceful entities and document which do not
+require links or Meta data.
+-}
+mkSimpleDocuments :: ResourcefulEntity a => [a] -> Document a
+mkSimpleDocuments res = mkDocuments res Nothing Nothing
+
+{- |
 A function for document which do not require links or Meta data.
 -}
 mkSimpleDocument' :: ResourceData a -> Document a
@@ -136,13 +162,28 @@
 <http://jsonapi.org/format/#document-compound-documents>
 -}
 mkCompoundDocument :: ResourcefulEntity a =>
-                      [a]
+                      a
                    -> Maybe Links
                    -> Maybe Meta
                    -> Included
                    -> Document a
 mkCompoundDocument res = mkCompoundDocument' (toResourceData res)
 
+{- |
+Constructor function for the Document data type.
+See 'mkIncludedResource' for constructing the 'Included' type.
+
+Supports building compound documents
+<http://jsonapi.org/format/#document-compound-documents>
+-}
+mkCompoundDocuments :: ResourcefulEntity a =>
+                      [a]
+                   -> Maybe Links
+                   -> Maybe Meta
+                   -> Included
+                   -> Document a
+mkCompoundDocuments res = mkCompoundDocument' (toResourceDataCollection res)
+
 mkCompoundDocument' :: ResourceData a
                     -> Maybe Links
                     -> Maybe Meta
@@ -165,9 +206,11 @@
 mkIncludedResource :: ResourcefulEntity a => a -> Included
 mkIncludedResource res = Included [AE.toJSON . R.toResource $ res]
 
-toResourceData :: ResourcefulEntity a => [a] -> ResourceData a
-toResourceData [r] = Singleton (R.toResource r)
-toResourceData rs  = List (map R.toResource rs)
+toResourceData :: ResourcefulEntity a => a -> ResourceData a
+toResourceData r = Singleton (R.toResource r)
+
+toResourceDataCollection :: ResourcefulEntity a => [a] -> ResourceData a
+toResourceDataCollection rs  = List (map R.toResource rs)
 
 {- |
 The 'Resource' type encapsulates the underlying 'Resource'
diff --git a/test/Network/JSONApi/DocumentSpec.hs b/test/Network/JSONApi/DocumentSpec.hs
--- a/test/Network/JSONApi/DocumentSpec.hs
+++ b/test/Network/JSONApi/DocumentSpec.hs
@@ -21,23 +21,21 @@
 spec =
   describe "JSON serialization" $ do
     it "JSON encodes/decodes a singleton resource" $ do
-      -- TODO: test the main resource actually is a singleton
-      let jsonApiObj = mkDocument [testObject] Nothing Nothing
+      let jsonApiObj = mkDocument testObject Nothing Nothing
           encodedJson = encodeDocumentObject jsonApiObj
           decodedJson = decodeDocumentObject encodedJson
 
       isRight decodedJson `shouldBe` True
 
     it "JSON encodes/decodes a list of resources" $ do
-      -- TODO: test the main resource actually is a list
-      let jsonApiObj = mkDocument [testObject, testObject2] Nothing Nothing
+      let jsonApiObj = mkDocuments [testObject, testObject2] Nothing Nothing
           encodedJson = encodeDocumentObject jsonApiObj
           decodedJson = decodeDocumentObject encodedJson
 
       isRight decodedJson `shouldBe` True
 
     it "contains the allowable top-level keys" $ do
-      let jsonApiObj = mkDocument [testObject] Nothing Nothing
+      let jsonApiObj = mkDocument testObject Nothing Nothing
           encodedJson = encodeDocumentObject jsonApiObj
           dataObject = encodedJson ^? Lens.key "data"
           linksObject = encodedJson ^? Lens.key "links"
@@ -50,14 +48,14 @@
       isJust includedObject `shouldBe` True
 
     it "allows an optional top-level links object" $ do
-      let jsonApiObj = mkDocument [testObject] (Just linksObj) Nothing
+      let jsonApiObj = mkDocument testObject (Just linksObj) Nothing
           encodedJson = encodeDocumentObject jsonApiObj
           decodedJson = decodeDocumentObject encodedJson
 
       isRight decodedJson `shouldBe` True
 
     it "allows an optional top-level meta object" $ do
-      let jsonApiObj = mkDocument [testObject] Nothing (Just testMetaObj)
+      let jsonApiObj = mkDocument testObject Nothing (Just testMetaObj)
           encodedJson = encodeDocumentObject jsonApiObj
           decodedJson = decodeDocumentObject encodedJson
 
@@ -65,7 +63,7 @@
 
     it "allows a heterogeneous list of related resources" $ do
       let includedResources = mkIncludedResource testObject
-          jsonApiObj = mkCompoundDocument [testObject] Nothing Nothing includedResources
+          jsonApiObj = mkCompoundDocument testObject Nothing Nothing includedResources
           encodedJson = encodeDocumentObject jsonApiObj
           decodedJson = decodeDocumentObject encodedJson
 
