@@ -17,16 +17,15 @@
17module Network.Google where
17module Network.Google where
19import Control.Applicative
19import Control.Applicative
20+import Control.Exception.Lens (throwingM)
20import Control.Monad
21import Control.Monad
21import Control.Monad.Base
22import Control.Monad.Base
22import Control.Monad.Catch
23import Control.Monad.Catch
23−import Control.Monad.IO.Class (MonadIO)
24import Control.Monad.Reader
24import Control.Monad.Reader
25import qualified Control.Monad.RWS.Lazy as LRW
25import qualified Control.Monad.RWS.Lazy as LRW
26import qualified Control.Monad.RWS.Strict as RW
26import qualified Control.Monad.RWS.Strict as RW
27import qualified Control.Monad.State.Lazy as LS
27import qualified Control.Monad.State.Lazy as LS
28import qualified Control.Monad.State.Strict as S
28import qualified Control.Monad.State.Strict as S
29−import Control.Monad.Trans.Class (lift)
30import Control.Monad.Trans.Control
29import Control.Monad.Trans.Control
31import Control.Monad.Trans.Except (ExceptT)
30import Control.Monad.Trans.Except (ExceptT)
32import Control.Monad.Trans.Identity (IdentityT)
31import Control.Monad.Trans.Identity (IdentityT)
@@ -35,8 +34,8 @@ import Control.Monad.Trans.Maybe (MaybeT)
35import Control.Monad.Trans.Resource
34import Control.Monad.Trans.Resource
36import qualified Control.Monad.Writer.Lazy as LW
35import qualified Control.Monad.Writer.Lazy as LW
37import qualified Control.Monad.Writer.Strict as W
36import qualified Control.Monad.Writer.Strict as W
38−import Network.Google.Auth
39import Network.Google.Env
37import Network.Google.Env
38+import Network.Google.Internal.HTTP
40import Network.Google.Prelude
39import Network.Google.Prelude
42newtype Google a = Google { unGoogle :: ReaderT Env (ResourceT IO) a }
41newtype Google a = Google { unGoogle :: ReaderT Env (ResourceT IO) a }
@@ -94,11 +93,19 @@ instance (Monoid w, MonadGoogle m) => MonadGoogle (RW.RWST r w s m) where
94instance (Monoid w, MonadGoogle m) => MonadGoogle (LRW.RWST r w s m) where
93instance (Monoid w, MonadGoogle m) => MonadGoogle (LRW.RWST r w s m) where
95 liftGoogle = lift . liftGoogle
94 liftGoogle = lift . liftGoogle
97−runGoogle :: MonadResource m => Env -> Google a -> m a
96+runGoogle :: (MonadResource m, HasEnv r) => r -> Google a -> m a
98−runGoogle e m = liftResourceT $ runReaderT (unGoogle m) e -- (e ^. environment)
97+runGoogle e m = liftResourceT $ runReaderT (unGoogle m) (e ^. environment)
100−send :: GoogleRequest a => a -> m (Rs a)
99+send :: (MonadGoogle m, GoogleRequest a) => a -> m (Rs a)
101−send = undefined
100+send x = liftGoogle $ do
103−-- download :: GoogleRequest (MediaDownload a) => a -> m (Rs (MediaDownload a))
105+media :: (MonadGoogle m, GoogleRequest (MediaDownload a))
107+ -> m (Rs (MediaDownload a))
104−-- download = send . MediaDownload
108+media = send . MediaDownload
110+hoistError :: MonadThrow m => Either Error a -> m a
111+hoistError = either (throwingM _Error) return