git.iko.soy/typeable/pagerduty
on develop help sign in
Adding type signatures
commit7b67cf7c6109514388dd91daf46046df06f50dfd authorBrendan Hay <brendan.g.hay@gmail.com> dateTue 30 Sep 2014, 20:39 (12 years ago) parente97e210
1 file changed+41−1
src/Control/Monad/Trans/PagerDuty.hs+41−1
src/Control/Monad/Trans/PagerDuty.hs+41−1
@@ -18,7 +18,30 @@
1818-- Stability : experimental
1919-- Portability : non-portable (GHC extensions)
2020
21−module Control.Monad.Trans.PagerDuty where
21+module Control.Monad.Trans.PagerDuty
22+ (
23+ -- * Transformer
24+ PDT
25+ -- ** Aliases
26+ , PD
27+
28+ -- * Run
29+ , runAWST
30+
31+ -- * Environment
32+ , Env
33+ , envDomain
34+ , envAuth
35+ , envManager
36+ , envLogging
37+
38+ -- * Integration API
39+ , submit
40+
41+ -- * REST API
42+ , send
43+ , paginate
44+ ) where
2245
2346import Control.Applicative
2447import Control.Monad.Base
@@ -39,6 +62,7 @@ data Env (s :: Security) = Env
3962 { _envDomain :: SubDomain
4063 , _envAuth :: Auth s
4164 , _envManager :: Manager
65+ , _envLogging ::
4266 }
4367
4468-- | A convenient alias for 'PDT' 'IO'.
@@ -102,18 +126,34 @@ runPDT (PDT k) = runExceptT . runReaderT k
102126hoistEither :: (MonadError Error m) => Either Error a -> m a
103127hoistEither = either throwError return
104128
129+scoped :: MonadReader (Env s) m => (Env s -> m a) -> m a
105130scoped f = ask >>= f
106131
132+submit :: (MonadIO m, MonadReader (Env s) m, Event a)
133+ => a
134+ -> m Response
107135submit = submitCatch >=> hoistEither
108136
137+submitCatch :: (MonadIO m, MonadReader (Env s) m, Event a)
138+ => a
139+ -> m (Either Error Response)
109140submitCatch x = scoped $ \e ->
110141 Int.submit (_envManager e) x
111142
143+send :: (MonadIO m, MonadReader (Env s) m, FromJSON b)
144+ => Request a s b
145+ -> m b
112146send = sendCatch >=> hoistEither
113147
148+sendCatch :: (MonadIO m, MonadReader (Env s) m, FromJSON b)
149+ => Request a s b
150+ -> m (Either Error b)
114151sendCatch x = scoped $ \Env{..} ->
115152 REST.send _envAuth _envDomain _envManager x
116153
154+paginate :: (MonadIO m, MonadReader (Env s) m, Paginate a, FromJSON b)
155+ => Request a s b
156+ -> Source m b
117157paginate x = paginateCatch x $= awaitForever (hoistEither >=> yield)
118158
119159paginateCatch :: (MonadIO m, MonadReader (Env s) m, Paginate a, FromJSON b)