diff --git a/Prolude.hs b/Prolude.hs
--- a/Prolude.hs
+++ b/Prolude.hs
@@ -1,3 +1,10 @@
+{- | 
+Module: Prolude
+Description: A custom prelude built by the ITProTV engineers.
+Copyright: Copyright (c) 2020 EdutainmentLIVE, LLC
+License: MIT
+-}
+
 module Prolude
   ( module Prolude.Aeson
   , module Prolude.ByteString
@@ -17,6 +24,7 @@
   , module Prolude.Test
   , module Prolude.Text
   , module Prolude.Time
+  , module Prolude.Uri
   , module Prolude.Uuid
   )
 where
@@ -39,4 +47,5 @@
 import Prolude.Test
 import Prolude.Text
 import Prolude.Time
+import Prolude.Uri
 import Prolude.Uuid
diff --git a/Prolude/Aeson.hs b/Prolude/Aeson.hs
--- a/Prolude/Aeson.hs
+++ b/Prolude/Aeson.hs
@@ -1,9 +1,15 @@
 {-# LANGUAGE PatternSynonyms #-}
 
 module Prolude.Aeson
-  ( module Data.Aeson
+  ( -- * Aeson re-exports
+    -- $aeson
+    module Data.Aeson
+    -- * Alias types
+    -- $alias
   , JsonOptions
   , JsonValue
+    -- * Pattern synonyms
+    -- $pattern
   , pattern JsonArray
   , pattern JsonBoolean
   , pattern JsonNull
@@ -31,6 +37,18 @@
 import qualified Data.Scientific as Scientific
 import qualified Data.Text as Text
 import qualified Data.Vector as Vector
+
+{- $aeson
+These are our re-exports from Aeson. They include: The FromJSON and ToJSON classes; Generic JSON parsing; (.!=), (.:), (.:?), (.=)
+-}
+
+{- $alias
+We created type aliases for Aeson.Options and Aeson.Value.
+-}
+
+{- $pattern
+We created pattern synonyms for the Aeson.Value constructors.
+-}
 
 type JsonOptions = Aeson.Options
 type JsonValue = Aeson.Value
diff --git a/Prolude/ByteString.hs b/Prolude/ByteString.hs
--- a/Prolude/ByteString.hs
+++ b/Prolude/ByteString.hs
@@ -1,9 +1,14 @@
 module Prolude.ByteString
-    ( module Data.ByteString
-    , LazyByteString
-    , putLazyByteString
-    , writeByteStringToFile
-    )
+  ( -- * ByteString re-exports
+    module Data.ByteString
+    -- * ByteString functions
+  , writeByteStringToFile
+    -- * LazyByteString type alias
+    -- $alias
+  , LazyByteString
+    -- * LazyByteString functions
+  , putLazyByteString
+  )
 where
 
 import Data.ByteString (ByteString)
@@ -11,6 +16,10 @@
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Lazy as LBS
 import qualified System.IO as IO
+
+{- $alias
+We created a type alias for LazyByteString.ByteString simply called LazyByteString.
+-}
 
 type LazyByteString = LBS.ByteString
 
diff --git a/Prolude/Core.hs b/Prolude/Core.hs
--- a/Prolude/Core.hs
+++ b/Prolude/Core.hs
@@ -1,36 +1,45 @@
 module Prolude.Core
-  ( module Control.Applicative
+  ( -- * Applicative re-exports
+    module Control.Applicative
+    -- * Monad re-exports
   , module Control.Monad
   , module Control.Monad.Fail
+  , module Data.Monoid
+    -- * Base re-exports
   , module Data.Bool
-  , module Data.Char
   , module Data.Either
   , module Data.Eq
   , module Data.Foldable
   , module Data.Function
   , module Data.Functor
-  , module Data.Int
   , module Data.Kind
-  , module Data.List
-  , module Data.Monoid
   , module Data.Ord
+  , module Data.Proxy
   , module Data.Semigroup
-  , module Data.String
   , module Data.Traversable
-  , module Data.Tuple
-  , module Data.Word
   , module GHC.Base
-  , module GHC.Enum
   , module GHC.Err
-  , module GHC.Float
   , module GHC.Generics
   , module GHC.IO.Exception
-  , module GHC.List
-  , module GHC.Num
-  , module GHC.Real
   , module GHC.Show
   , module System.IO
   , module Text.Read
+    -- * List re-exports
+  , module Data.List
+  , module GHC.List
+    -- * Number re-exports
+  , module Data.Int
+  , module GHC.Enum
+  , module GHC.Float
+  , module GHC.Num
+  , module GHC.Real
+    -- * String + Text re-exports
+  , module Data.Char
+  , module Data.String
+  , module Data.Word
+    -- * Tuple re-exports
+  , module Data.Tuple
+    -- * Identity
   , identity
   )
 where
@@ -105,4 +114,3 @@
 identity :: a -> a
 identity x = x
 {-# INLINE identity #-}
-
diff --git a/Prolude/Csv.hs b/Prolude/Csv.hs
--- a/Prolude/Csv.hs
+++ b/Prolude/Csv.hs
@@ -1,9 +1,14 @@
 {-# LANGUAGE ConstraintKinds #-}
 
 module Prolude.Csv
-    ( module Data.Csv
+    ( -- * Csv re-exports
+      module Data.Csv
+      -- * Alias types
+      -- $alias
     , FromCsvField
     , ToCsvField
+      -- * Alias functions
+      -- $functions
     , parseCsvField
     , toCsvField
     )
@@ -14,6 +19,14 @@
     , ToNamedRecord
     )
 import qualified Data.Csv as Csv
+
+{- $alias
+We created type aliases for the Csv.ToField and Csv.FromField classes.
+-}
+
+{- $functions
+We created aliases for the Csv.parseField and Csv.toField functions.
+-}
 
 type FromCsvField = Csv.FromField
 type ToCsvField = Csv.ToField
diff --git a/Prolude/Exception.hs b/Prolude/Exception.hs
--- a/Prolude/Exception.hs
+++ b/Prolude/Exception.hs
@@ -1,6 +1,8 @@
 module Prolude.Exception
-  ( module Control.Exception.Safe
+  ( -- * Exception re-exports
+    module Control.Exception.Safe
   , UnsafeException.AsyncException(..)
+    -- * Exception functions
   , catchIf
   , unsafeEvaluate
   , unsafeThrow
@@ -12,11 +14,14 @@
 import qualified Control.Exception as UnsafeException
 import Control.Exception.Safe hiding (catchIO, throwM)
 
+-- | Function alias for Control.Exception.evaluate
 unsafeEvaluate :: a -> IO a
 unsafeEvaluate = UnsafeException.evaluate
 
+-- | Function alias for Control.Exception.throw
 unsafeThrow :: Exception e => e -> a
 unsafeThrow = UnsafeException.throw
 
+-- | Catch exception based on a predicate
 catchIf :: (MonadCatch m, Exception e) => (e -> Bool) -> m a -> (e -> m a) -> m a
 catchIf f a b = catch a $ \e -> if f e then b e else throw e
diff --git a/Prolude/Foldable.hs b/Prolude/Foldable.hs
--- a/Prolude/Foldable.hs
+++ b/Prolude/Foldable.hs
@@ -1,7 +1,11 @@
 module Prolude.Foldable
-    ( module Data.Foldable
+    ( -- * Foldable re-exports
+      module Data.Foldable
+      -- * Map re-exports
     , module Data.Map
+      -- * Set re-exports
     , module Data.Set
+      -- * GHC re-exports
     , module GHC.Exts
     )
 where
diff --git a/Prolude/Json.hs b/Prolude/Json.hs
--- a/Prolude/Json.hs
+++ b/Prolude/Json.hs
@@ -1,19 +1,25 @@
 module Prolude.Json
-  ( module Data.Aeson
+  ( -- * Aeson re-exports
+    module Data.Aeson
+    -- * Aeson.Types re-exports
   , module Data.Aeson.Types
+    -- * Aeson functions
   , jsonEitherDecode
   , jsonEncode
   )
 where
 
-import Data.Aeson (FromJSON, ToJSON, eitherDecode, encode, withObject, withText)
+import Data.Aeson (withObject, withText)
 import Data.Aeson.Types (Parser)
-import Data.ByteString.Lazy (ByteString)
-import Data.Either (Either)
-import Data.String (String)
+import qualified Data.Aeson as Aeson
+import qualified Data.ByteString.Lazy as ByteString
+import qualified Data.Either as Either
+import qualified Data.String as String
 
-jsonEitherDecode :: FromJSON a => ByteString -> Either String a
-jsonEitherDecode = eitherDecode
+-- | Function alias for Aeson.eitherDecode
+jsonEitherDecode :: Aeson.FromJSON a => ByteString.ByteString -> Either.Either String.String a
+jsonEitherDecode = Aeson.eitherDecode
 
-jsonEncode :: ToJSON a => a -> ByteString
-jsonEncode = encode
+-- | Function alias for Aeson.encode
+jsonEncode :: Aeson.ToJSON a => a -> ByteString.ByteString
+jsonEncode = Aeson.encode
diff --git a/Prolude/MongoDB.hs b/Prolude/MongoDB.hs
--- a/Prolude/MongoDB.hs
+++ b/Prolude/MongoDB.hs
@@ -2,7 +2,10 @@
 {-# LANGUAGE ConstraintKinds #-}
 
 module Prolude.MongoDB
-  ( module Database.MongoDB
+  ( -- * MongoDB re-exports
+    module Database.MongoDB
+    -- * Type aliases
+    -- $type
   , MongoAction
   , MongoCollection
   , MongoDatabase
@@ -12,6 +15,8 @@
   , MongoQuery
   , MongoValue
   , MongoVal
+    -- * Pattern synonyms
+    -- $synonyms
   , pattern MongoArray
   , pattern MongoBin
   , pattern MongoBool
@@ -32,6 +37,8 @@
   , pattern MongoUserDef
   , pattern MongoUTC
   , pattern MongoUuid
+    -- * Function aliases
+    -- $functions
   , mongoFailed
   , mongoInsert_
   , mongoModified
@@ -42,13 +49,25 @@
 
 import Prolude.Core
 
-import Control.Monad.IO.Class (MonadIO)
 import Database.MongoDB (ObjectId, UpdateOption(MultiUpdate), fval, genObjectId, (=:))
+import qualified Control.Monad.IO.Class as Monad
 import qualified Data.Int as Int
 import qualified Data.Text as Text
 import qualified Data.Time as Time
 import qualified Database.MongoDB as Mongo
 
+{- $type
+We created type aliases for specific Mongo types. These include: Action, Collection, Database, Document, Field, Label, Query, Selector, Val, and Value.
+-}
+
+{- $synonyms
+We created pattern synonyms for the MongoValue constructors.
+-}
+
+{- $functions
+We created aliases for specific Mongo functions. These include: failed, insert_, nModified, select, and updateMany.
+-}
+
 type MongoAction = Mongo.Action
 type MongoCollection = Mongo.Collection
 type MongoDatabase = Mongo.Database
@@ -146,7 +165,7 @@
 mongoFailed :: Mongo.WriteResult -> Bool
 mongoFailed = Mongo.failed
 
-mongoInsert_ :: MonadIO m => MongoCollection -> MongoDocument -> MongoAction m ()
+mongoInsert_ :: Monad.MonadIO m => MongoCollection -> MongoDocument -> MongoAction m ()
 mongoInsert_ = Mongo.insert_
 
 mongoModified :: Mongo.WriteResult -> Maybe Int
@@ -156,7 +175,7 @@
 mongoSelect = Mongo.select
 
 mongoUpdateMany
-  :: MonadIO m
+  :: Monad.MonadIO m
   => MongoCollection
   -> [(MongoSelector, MongoDocument, [UpdateOption])]
   -> MongoAction m Mongo.WriteResult
diff --git a/Prolude/Swagger.hs b/Prolude/Swagger.hs
--- a/Prolude/Swagger.hs
+++ b/Prolude/Swagger.hs
@@ -1,9 +1,13 @@
 {-# LANGUAGE ConstraintKinds #-}
 
 module Prolude.Swagger 
-    ( Swagger.SwaggerType(..)
+    ( -- * SwaggerType re-export
+      Swagger.SwaggerType(..)
+      -- * Alias types
+      -- $alias
     , SwaggerToSchema
     , SwaggerToParamSchema
+      -- * Functions
     , defaultDeclareNamedSchema
     )
 where
@@ -13,9 +17,14 @@
 import qualified Data.Swagger.Internal.Schema as Swagger
 import qualified Data.Swagger.Internal.TypeShape as Swagger
 
+{- $alias
+We created type aliases for Swagger.ToSchema and Swagger.ToParamSchema.
+-}
+
 type SwaggerToParamSchema = Swagger.ToParamSchema
 type SwaggerToSchema = Swagger.ToSchema
 
+-- | Function to help with Swagger.ToSchema instances
 defaultDeclareNamedSchema
   :: Applicative f => (Swagger.Schema -> Swagger.Schema) -> proxy a -> f Swagger.NamedSchema
 defaultDeclareNamedSchema f = const . pure . Swagger.NamedSchema Nothing $ f mempty
diff --git a/Prolude/Test.hs b/Prolude/Test.hs
--- a/Prolude/Test.hs
+++ b/Prolude/Test.hs
@@ -4,8 +4,11 @@
 {-# LANGUAGE UndecidableInstances #-}
 
 module Prolude.Test 
-  ( module Test.QuickCheck
+  ( -- * QuickCheck re-exports
+    module Test.QuickCheck
+    -- * Type
   , ArbitraryUniform(..)
+    -- * Function
   , arbitraryIO
   )
 where
diff --git a/Prolude/Text.hs b/Prolude/Text.hs
--- a/Prolude/Text.hs
+++ b/Prolude/Text.hs
@@ -1,6 +1,9 @@
 module Prolude.Text
-  ( LazyText
+  ( -- $conversions
+    -- * Types
+    LazyText
   , Text.Text
+    -- * Functions
   , lazyTextToString
   , lazyTextToText
   , stringToLazyText
@@ -12,6 +15,18 @@
 
 import qualified Data.Text as Text
 import qualified Data.Text.Lazy as LazyText
+
+{- $conversions
++----------+------------------+------------------+----------------+
+| From/To  | LazyText         | String           | Text           |
++----------+------------------+------------------+----------------+
+| LazyText | -                | lazyTextToString | lazyTextToText |
++----------+------------------+------------------+----------------+
+| String   | stringToLazyText | -                | stringToText   |
++----------+------------------+------------------+----------------+
+| Text     | textToLazyText   | textToString     | -              |
++----------+------------------+------------------+----------------+
+-}
 
 type LazyText = LazyText.Text
 
diff --git a/Prolude/Time.hs b/Prolude/Time.hs
--- a/Prolude/Time.hs
+++ b/Prolude/Time.hs
@@ -1,8 +1,12 @@
 module Prolude.Time
-  ( module Data.Time.Calendar
+  ( -- * Data.Time.Calendar re-exports
+    module Data.Time.Calendar
+    -- * Data.Time.Clock re-exports
   , module Data.Time.Clock
   , module Data.Time.Clock.POSIX
+    -- * Data.Time.Format re-exports
   , module Data.Time.Format
+    -- * Functions
   , getCurrentTime
   )
 where
@@ -13,9 +17,9 @@
 import Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime, posixSecondsToUTCTime, utcTimeToPOSIXSeconds)
 import Data.Time.Format (defaultTimeLocale, formatTime)
 
-import Control.Monad.IO.Class (MonadIO(liftIO))
+import qualified Control.Monad.IO.Class as Monad
 import qualified Data.Time as Time
 
 -- | Returns now
-getCurrentTime :: MonadIO m => m UTCTime
-getCurrentTime = liftIO Time.getCurrentTime
+getCurrentTime :: Monad.MonadIO m => m UTCTime
+getCurrentTime = Monad.liftIO Time.getCurrentTime
diff --git a/Prolude/Uri.hs b/Prolude/Uri.hs
new file mode 100644
--- /dev/null
+++ b/Prolude/Uri.hs
@@ -0,0 +1,53 @@
+module Prolude.Uri 
+  ( -- $conversions
+    -- * Type alias
+    Uri
+    -- * Functions
+  , stringToUri
+  , textToUri
+  , uriToString
+  , uriToText
+  )
+where
+
+import qualified Data.Either as Either
+import qualified Data.String as String
+import qualified Data.Text as Text
+import qualified Network.URI as URI
+
+import qualified Prolude.Core as Core
+import qualified Prolude.Text as Text
+
+{- $conversions
++---------+-------------+-------------+
+| From/To | Uri         | String      |
++---------+-------------+-------------+
+| Uri     | -           | uriToString |
++---------+-------------+-------------+
+| String  | stringToUri | -           |
++---------+-------------+-------------+
+
++---------+-----------+-----------+
+| From/To | Uri       | Text      |
++---------+-----------+-----------+
+| Uri     | -         | uriToText |
++---------+-----------+-----------+
+| Text    | textToUri | -         |
++---------+-----------+-----------+
+-}
+
+type Uri = URI.URI
+
+stringToUri :: String.String -> Either.Either String.String URI.URI
+stringToUri string = case URI.parseURI string of
+  Nothing -> Left $ "invalid URI: " <> show string
+  Just uri -> Right uri
+
+textToUri :: Text.Text -> Either.Either String.String URI.URI
+textToUri = stringToUri . Text.textToString
+
+uriToString :: URI.URI -> String.String
+uriToString uri = URI.uriToString Core.identity uri ""
+
+uriToText :: URI.URI -> Text.Text
+uriToText = Text.stringToText . uriToString
diff --git a/Prolude/Uuid.hs b/Prolude/Uuid.hs
--- a/Prolude/Uuid.hs
+++ b/Prolude/Uuid.hs
@@ -1,13 +1,15 @@
 module Prolude.Uuid 
-    ( Uuid
-    , randomUuid
-    , textToUuid
-    , uuidToText
-    , wordsToUuid
-    )
+  ( -- * Type alias
+    Uuid
+    -- * Functions
+  , randomUuid
+  , textToUuid
+  , uuidToText
+  , wordsToUuid
+  )
 where
 
-import Control.Monad.IO.Class (MonadIO(liftIO))
+import qualified Control.Monad.IO.Class as Monad
 import qualified Data.Maybe as Maybe
 import qualified Data.Text as Text
 import qualified Data.UUID as UUID
@@ -17,14 +19,18 @@
 
 type Uuid = UUID.UUID
 
+-- | Converts a Uuid to Text
 uuidToText :: Uuid -> Text.Text
 uuidToText = UUID.toText
 
+-- | Converts a Text to a Maybe Uuid
 textToUuid :: Text.Text -> Maybe.Maybe Uuid
 textToUuid = UUID.fromText
 
+-- | Creates a Uuid from Words
 wordsToUuid :: Word.Word32 -> Word.Word32 -> Word.Word32 -> Word.Word32 -> Uuid
 wordsToUuid = UUID.fromWords
 
-randomUuid :: MonadIO m => m Uuid
-randomUuid = liftIO UUID.nextRandom
+-- | Returns a randomUuid
+randomUuid :: Monad.MonadIO m => m Uuid
+randomUuid = Monad.liftIO UUID.nextRandom
diff --git a/prolude.cabal b/prolude.cabal
--- a/prolude.cabal
+++ b/prolude.cabal
@@ -1,7 +1,7 @@
 cabal-version: >= 1.10
 
 name: prolude
-version: 0.0.0.13
+version: 0.0.0.14
 synopsis: ITProTV's custom prelude
 description:
     Prolude is ITProTV's custom prelude.
@@ -40,6 +40,7 @@
         Prolude.Test
         Prolude.Text
         Prolude.Time
+        Prolude.Uri
         Prolude.Uuid
 
     build-depends:
@@ -48,17 +49,18 @@
         , bytestring >= 0.10.10 && < 0.11
         , cassava >= 0.5.2.0 && < 0.6
         , containers >= 0.6.2 && < 0.7
-        , generic-random >= 1.3.0.1 && < 1.4
+        , generic-random >= 1.3.0 && < 1.4
         , mongoDB >= 2.7.0 && < 2.8
         , mtl >= 2.2.2 && < 2.3
-        , QuickCheck >= 2.14.1 && < 2.15
-        , quickcheck-instances >= 0.3.25 && < 0.4
-        , lens >= 4.19.2 && < 4.20
+        , QuickCheck >= 2.13.2 && < 2.15
+        , quickcheck-instances >= 0.3.23 && < 0.4
+        , lens >= 4.18.1 && < 4.20
+        , network-uri >= 2.6.3 && < 2.7
         , persistent >= 2.8 && < 3
         , persistent-mongoDB >= 2.8 && < 3
         , safe-exceptions >= 0.1.7 && < 0.2
         , scientific >= 0.3.6 && < 0.4
-        , swagger2 >= 2.6 && < 2.7
+        , swagger2 >= 2.5 && < 2.7
         , text >= 1.2.3 && < 1.3
         , time >= 1.9.3 && < 1.10
         , uuid >= 1.3.13 && < 1.4
