diff --git a/free-http.cabal b/free-http.cabal
--- a/free-http.cabal
+++ b/free-http.cabal
@@ -1,6 +1,6 @@
 name:                free-http
 
-version:             0.1.0.1
+version:             0.1.0.2
 
 synopsis:            An HTTP Client based on Free Monads.
 
@@ -68,7 +68,8 @@
   location: git://github.com/aaronlevin/free-http.git
 
 library
-  exposed-modules:     Network.HTTP.Client.Free.ArbitraryClient
+  exposed-modules:     Network.HTTP.Client.Free
+                       Network.HTTP.Client.Free.ArbitraryClient
                        Network.HTTP.Client.Free.HttpClient
                        Network.HTTP.Client.Free.PureClient
                        Network.HTTP.Client.Free.Types
diff --git a/src/Network/HTTP/Client/Free.hs b/src/Network/HTTP/Client/Free.hs
new file mode 100644
--- /dev/null
+++ b/src/Network/HTTP/Client/Free.hs
@@ -0,0 +1,82 @@
+{-| The primary Free Monad wrapping HTTP actions.
+-}
+{-# LANGUAGE TypeFamilies #-}
+
+module Network.HTTP.Client.Free (
+
+    -- * Type Families
+    -- ** Base Request type
+      RequestType
+    -- ** Base REsponse type
+    , ResponseType
+
+    -- * Types
+    -- ** The base free monad type
+    , HttpF(HttpF)
+    -- ** A type alias for 'FT (HttpF client) m a'
+    , FreeHttp
+
+    -- * smart constructors for http verbs
+    , connect
+    , delete
+    , get
+    , head
+    , options
+    , patch
+    , post
+    , put
+    , trace
+
+) where
+
+import Control.Monad.Trans.Free.Church (FT, liftF)
+import Network.HTTP.Client (httpLbs, Manager, Request, Response)
+import Network.HTTP.Client.Free.Types (FreeHttp, HttpF(HttpF), RequestType, ResponseType)
+import Network.HTTP.Types.Method (StdMethod(..))
+import Prelude hiding (head)
+
+-- | smart constructors
+get :: Monad m
+    => RequestType client
+    -> FT (HttpF client) m (ResponseType client)
+get req = liftF (HttpF GET req id)
+
+post :: Monad m
+     => RequestType client
+     -> FT (HttpF client) m (ResponseType client)
+post req = liftF (HttpF POST req id)
+
+head :: Monad m
+     => RequestType client
+     -> FT (HttpF client) m (ResponseType client)
+head req = liftF (HttpF HEAD req id)
+
+put :: Monad m
+    => RequestType client
+    -> FT (HttpF client) m (ResponseType client)
+put req = liftF (HttpF PUT req id)
+
+delete :: Monad m
+       => RequestType client
+       -> FT (HttpF client) m (ResponseType client)
+delete req = liftF (HttpF DELETE req id)
+
+trace :: Monad m
+      => RequestType client
+      -> FT (HttpF client) m (ResponseType client)
+trace req = liftF (HttpF TRACE req id)
+
+connect :: Monad m
+        => RequestType client
+        -> FT (HttpF client) m (ResponseType client)
+connect req = liftF (HttpF CONNECT req id)
+
+options :: Monad m
+        => RequestType client
+        -> FT (HttpF client) m (ResponseType client)
+options req = liftF (HttpF OPTIONS req id)
+
+patch :: Monad m
+      => RequestType client
+      -> FT (HttpF client) m (ResponseType client)
+patch req = liftF (HttpF PATCH req id)
