git.iko.soy/typeable/servant
on master help sign in
Add MonadBaseControl IO ClientM instance
b548f8dOleg Grenrus
servant-client/servant-client.cabal+2
@@ -47,12 +47,14 @@ library
47 , http-client-tls >= 0.2.2 && < 0.4
47 , http-client-tls >= 0.2.2 && < 0.4
48 , http-media >= 0.6.2 && < 0.7
48 , http-media >= 0.6.2 && < 0.7
49 , http-types >= 0.8.6 && < 0.10
49 , http-types >= 0.8.6 && < 0.10
50+ , monad-control >= 1.0.0.4 && < 1.1
50 , network-uri >= 2.6 && < 2.7
51 , network-uri >= 2.6 && < 2.7
51 , safe >= 0.3.9 && < 0.4
52 , safe >= 0.3.9 && < 0.4
52 , servant == 0.9.*
53 , servant == 0.9.*
53 , string-conversions >= 0.3 && < 0.5
54 , string-conversions >= 0.3 && < 0.5
54 , text >= 1.2 && < 1.3
55 , text >= 1.2 && < 1.3
55 , transformers >= 0.3 && < 0.6
56 , transformers >= 0.3 && < 0.6
57+ , transformers-base >= 0.4.4 && < 0.5
56 , transformers-compat >= 0.4 && < 0.6
58 , transformers-compat >= 0.4 && < 0.6
57 , mtl
59 , mtl
58 hs-source-dirs: src
60 hs-source-dirs: src
servant-client/src/Servant/Common/Req.hs+22−6
@@ -1,9 +1,11 @@
1+{-# LANGUAGE CPP #-}
1−{-# LANGUAGE DeriveDataTypeable #-}
2+{-# LANGUAGE DeriveDataTypeable #-}
2−{-# LANGUAGE DeriveGeneric #-}
3+{-# LANGUAGE DeriveGeneric #-}
4+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
5+{-# LANGUAGE MultiParamTypeClasses #-}
3−{-# LANGUAGE CPP #-}
6+{-# LANGUAGE TypeFamilies #-}
4−{-# LANGUAGE OverloadedStrings #-}
7+{-# LANGUAGE OverloadedStrings #-}
5−{-# LANGUAGE ScopedTypeVariables #-}
8+{-# LANGUAGE ScopedTypeVariables #-}
6−{-# LANGUAGE GeneralizedNewtypeDeriving #-}
7
9
8module Servant.Common.Req where
10module Servant.Common.Req where
9
11
@@ -24,8 +26,10 @@ import Control.Monad.Trans.Except
24
26
25
27
26import GHC.Generics
28import GHC.Generics
29+import Control.Monad.Base (MonadBase (..))
27import Control.Monad.IO.Class ()
30import Control.Monad.IO.Class ()
28import Control.Monad.Reader
31import Control.Monad.Reader
32+import Control.Monad.Trans.Control (MonadBaseControl (..))
29import Data.ByteString.Lazy hiding (pack, filter, map, null, elem, any)
33import Data.ByteString.Lazy hiding (pack, filter, map, null, elem, any)
30import Data.String
34import Data.String
31import Data.String.Conversions
35import Data.String.Conversions
@@ -180,6 +184,18 @@ newtype ClientM a = ClientM { runClientM' :: ReaderT ClientEnv (ExceptT ServantE
180 , MonadThrow, MonadCatch
184 , MonadThrow, MonadCatch
181 )
185 )
182
186
187+instance MonadBase IO ClientM where
188+ liftBase = ClientM . liftBase
189+
190+instance MonadBaseControl IO ClientM where
191+ type StM ClientM a = Either ServantError a
192+
193+ -- liftBaseWith :: (RunInBase ClientM IO -> IO a) -> ClientM a
194+ liftBaseWith f = ClientM (liftBaseWith (\g -> f (g . runClientM')))
195+
196+ -- restoreM :: StM ClientM a -> ClientM a
197+ restoreM st = ClientM (restoreM st)
198+
183runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)
199runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)
184runClientM cm env = runExceptT $ (flip runReaderT env) $ runClientM' cm
200runClientM cm env = runExceptT $ (flip runReaderT env) $ runClientM' cm
185
201